מטריצות תאימות

סעיף זה מתאר את מטריצות תאימות המסגרת וההתקנים ואת סכימת מטריצת התאימות . לכללי התאמה, ראה כללי התאמה .

מטריצת תאימות מסגרת (FCM)

מטריצת תאימות המסגרת (FCM) מתארת ​​את הדרישות של המסגרת במכשיר שהיא פועלת עליו. מטריצת תאימות המסגרת מורכבת ממטריצת תאימות המערכת, מטריצת תאימות המוצר ומטריצת התאימות system_ext . דרישות ה-FCM חייבות להתקיים על ידי מניפסט המכשיר (דרישות נאכפות בזמן בנייה, זמן ריצה וב-VTS).

FCM system_ext וה-FCM של המוצר הם משלימים של FCM ספציפי למכשיר (מותקן במחיצת המערכת).

  • התקן FCM צריך לשקף את הדרישות של מודולים במחיצת המערכת .
  • FCM system_ext צריך לשקף את הדרישות לפי מודולים במחיצת system_ext.
  • המוצר FCM צריך לשקף את הדרישות לפי מודולים במחיצת המוצר .

כל ה-FCMs צריכים להתיישר עם השינויים של OEM למסגרת במחיצות המערכת, המוצר וה-system_ext. לדוגמה, אם אפליקציה המותקנת במחיצת המוצר משתמשת בהרחבת ספק של ממשק HAL, יש להצהיר על דרישת ממשק HAL ב-FCM של המוצר.

קובץ מטריצת תאימות מערכת לדוגמה:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

לפרטים נוספים, ראה מחזור חיים של FCM .

מטריצת תאימות מוצרים

המוצר FCM הוא קובץ מטריצת תאימות למסגרת במחיצת המוצר. אובייקט VINTF מצטרף ל-FCM של המוצר עם FCMs במחיצות system ו-system_ext בזמן ריצה.

קובץ FCM למוצר לדוגמה:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

מטריצת תאימות System_ext

FCM system_ext הוא קובץ מטריצת תאימות מסגרת במחיצת system_ext. אובייקט VINTF מצטרף ל- system_ext FCM עם FCMs במערכת ומחיצות המוצר בזמן ריצה. ראה מטריצת תאימות מוצרים עבור קובץ system_ext FCM לדוגמה.

מטריצת תאימות מכשירים (DCM)

מטריצת תאימות המכשיר מתארת ​​סט של דרישות שהמכשיר מצפה מהמסגרת (דרישות נאכפות בזמן ההשקה וזמן OTA).

קובץ DCM לדוגמה:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

סכימת מטריצת תאימות

סעיף זה מתאר את המשמעות של תגי XML אלה. כמה תגים "נדרשים" עשויים להיות חסרים בקובץ המקור בעץ המקור של אנדרואיד ונכתבו על ידי assemble_vintf בזמן הבנייה. תגיות "חובה" חייבות להיות בקבצים המתאימים במכשיר.

?xml
אופציונאלי. הוא מספק מידע רק למנתח ה-XML.
compatibility-matrix.version
נדרש. גרסת מטא של מטריצת תאימות זו. מתאר את האלמנטים הצפויים במטריצת התאימות. לא קשור לגרסת XML.
compatibility-matrix.type
נדרש. סוג מטריצת תאימות זו:
  • "device" : מטריצת תאימות מכשיר.
  • "framework" : מטריצת תאימות למסגרת.
manifest.level
נדרש עבור מטריצת תאימות מסגרת. באנדרואיד 12 ומעלה, מותרים בקבצי מטריצות תאימות למסגרת במחיצות המוצר וה-system_ext. מציין את גרסת מטריצת תאימות המסגרת (גירסת FCM) של קובץ זה. אל תצהיר על כך במטריצת תאימות מסגרת ספציפית למכשיר (כלומר DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
אופציונלי ויכול לחזור. מפרט HAL בודד (HIDL או מקורי) שנדרש על ידי הבעלים של מטריצת התאימות (מסגרת או מכשיר) להיות נוכח. ערכי HAL מובחנים על ידי אלמנט <name> ; יכולים להיות מספר ערכי HAL עם אותו שם (מרמז על תנאי "ו").
compatibility-matrix.hal.format
אופציונאלי. הערך יכול להיות אחד מ:
  • "hidl" : HIDL HALs. זוהי ברירת המחדל.
  • "aidl" : AIDL HALs . תקף רק על מטא-גרסת מטריצת תאימות 2.0.
  • "native" : HALs ילידים.
compatibility-matrix.hal.optional
התכונה היא אופציונלית וברירת המחדל היא false. מציין אם HAL זה הוא אופציונלי לבעלים של מטריצת התאימות (מסגרת או מכשיר). אם ערך <hal> מסומן כאופציונלי, זה אומר שהבעלים יכול לעבוד עם HAL זה, אם קיים, אך אינו מחייב את זה להיות נוכח.
compatibility-matrix.hal.name
נדרש. שם החבילה המלא של HAL זה. דוגמאות:
  • android.hardware.camera (HIDL או AIDL HAL)
  • GLES (HAL מקורי, דורש שם בלבד)
compatibility-matrix.hal.version
רשימה של טווחי גרסאות (ראה התאמות HAL ) המגדירה לאילו גרסאות הבעלים של מטריצת התאימות (מסגרת או מכשיר) מצפה.

עבור HIDL ו-HALs מקורי, נדרש, יכול לחזור ללא כפילויות. הפורמט הוא אחד מהאפשרויות הבאות:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (מקביל ל- MAJOR . MINOR - MINOR )

עבור AIDL HALs, אסור להיות נוכח במכשירים עם אנדרואיד 11 ומטה. אופציונלי במכשירים עם גרסאות מאוחרות יותר. אם צוין, הפורמט הוא אחד מהבאים:
  • VERSION_MIN - VERSION_MAX
  • VERSION (שווה ערך ל- VERSION - VERSION )
אם לא מצוין, הערך כברירת מחדל הוא 1 .
compatibility-matrix.hal.interface
אופציונלי, יכול לחזור. רשימה של ממשקים נדרשים של HAL זה.
compatibility-matrix.hal.interface.name
נדרש. שם הממשק.
compatibility-matrix.hal.interface.instance
אופציונלי, יכול לחזור. רשימה של מופעים נדרשים של ממשק זה.
compatibility-matrix.hal.interface.regex-instance
אופציונלי, יכול לחזור. רשימה של דפוסי שם מופע נדרשים בממשק זה. השתמש בפורמט ביטוי רגיל מורחב .
compatibility-matrix.kernel
אופציונלי, יכול לחזור. ציין רשימה של תצורות ליבה שהמסגרת דורשת בכל גרסת ליבה.
מספר <kernel> עם אותה <version> יכול להתקיים כדי לרמוז על קשר "ו". כל <kernel> הוא "פרגמנט" מהדרישות המופעלות רק כאשר מתקיימים <conditions> .
compatibility-matrix.kernel.version
נדרש. גרסת ליבה. הפורמט הוא VERSION . MAJOR_REVISION . MINOR_REVISION . הגרסה והגרסה העיקרית חייבים להתאים בדיוק. גרסה מינורית מגדירה את גרסת ה-LTS המינימלית של הליבה שהמסגרת מצפה לה.
compatibility-matrix.kernel.condition
אופציונאלי. לא חייב להתקיים עבור <kernel> הראשון של כל גרסה. מציין רשימה של תנאים. כאשר התנאים מתקיימים, הדרישות המצוינות בפרגמנט <kernel> זה מופעלות.
compatibility-matrix.kernel.config
אופציונלי, יכול לחזור. מפרט את פריטי CONFIG שיש להתאים עבור גרסת ליבה זו. כל פריט CONFIG הוא זוג מפתח-ערך; פריטי תצורה מובחנים על ידי מפתח.
compatibility-matrix.kernel.config.key
נדרש. שם המפתח של הפריט CONFIG . מתחיל עם CONFIG_ .
compatibility-matrix.kernel.config.value
נדרש. ערך הפריט CONFIG . הפורמט תלוי בסוג:
  • string . מרכאות נשמטות.
  • int . ערכים עשרוניים והקסדצימליים (חייבים להתחיל ב 0x או 0X) מתקבלים. מתפרש כמספר שלם של 64 סיביות; הצפות גורמות לקטיעה. (הנתח מקבל ערכים מ-2 64 + 1 עד 2 64 - 1, סיביות 65 קטועה; לפרטים עיין בדף האיש של strtoull .)
  • range . הפורמט הוא [int]-[int] , למשל 10-20 . ערכים הקסדצימליים מתקבלים וחייבים להתחיל ב 0x או 0X . שני גבולות חייבים להיות מספר שלם של 64 סיביות ללא סימן.
  • tristate . ערכים חוקיים הם y , m ו- n .
compatibility-matrix.kernel.config.value.type
נדרש. סוג הערך של פריט CONFIG , אחד מ:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
נדרש. מכיל את כל הערכים הקשורים למדיניות. משמש רק על ידי מטריצת תאימות המסגרת.
compatibility-matrix.sepolicy.sepolicy-version
חובה, יכול לחזור. מתאר את הדרישה בגרסת sepolicy. מתאים ל- manifest.sepolicy.version . כל מופע של אלמנט מגדיר מגוון של גרסאות sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
נדרש. מצהיר על גרסת policydb שאיתה המסגרת עובדת.
compatibility-matrix.avb.vbmeta-version
אופציונאלי; משמש רק על ידי מטריצת תאימות המסגרת. מצהיר על גרסת ה-AVB המשמשת לחתום על system.img . הוצא משימוש באנדרואיד 10.
compatibility-matrix.vendor-ndk
אופציונאלי; בשימוש רק על ידי מטריצת תאימות המכשיר. מצהיר על הדרישה של תמונת מצב של ספק VNDK. אם חסר, לא נדרשת דרישת VNDK בתמונת המערכת.
compatibility-matrix.vendor-ndk.version
נדרש. מספר שלם חיובי המצהיר על גרסת VNDK הנדרשת על ידי תמונת הספק.
compatibility-matrix.vendor-ndk.library
אופציונלי, יכול לחזור. מצהיר על קבוצה של ספריות VNDK הנדרשת על ידי תמונת הספק. אותה סמנטיקה כמו manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
אופציונלי, יכול לחזור; בשימוש רק על ידי מטריצת תאימות המכשיר. מצהיר על הדרישה של אפליקציות הספק בגרסאות System SDK. אם חסר, לא נדרשת דרישה של System SDK בתמונת המערכת.