مصفوفات التوافق

يصف هذا القسم مصفوفات توافق الإطار والجهاز ومخطط مصفوفة التوافق . لمعرفة قواعد المطابقة، راجع قواعد المطابقة .

مصفوفة توافق الإطار (FCM)

تصف مصفوفة توافق إطار العمل (FCM) متطلبات إطار العمل على الجهاز الذي يعمل عليه. تتكون مصفوفة توافق الإطار من مصفوفة توافق النظام، ومصفوفة توافق المنتج ، ومصفوفة توافق system_ext . يجب استيفاء متطلبات FCM من خلال بيان الجهاز (المتطلبات التي يتم فرضها في وقت الإنشاء ووقت التشغيل وفي VTS).

يعد system_ext FCM والمنتج FCM مكملين لـ FCM الخاص بالجهاز (المثبت في قسم النظام).

  • يجب أن يعكس جهاز FCM متطلبات الوحدات الموجودة في قسم النظام .
  • يجب أن يعكس System_ext FCM المتطلبات حسب الوحدات الموجودة في قسم 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_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

System_ext FCM هو ملف مصفوفة توافق إطار العمل في قسم 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 هذه. قد تكون بعض العلامات "المطلوبة" مفقودة من الملف المصدر في شجرة مصدر Android ويتم كتابتها بواسطة assemble_vintf في وقت الإنشاء. يجب أن تكون العلامات "المطلوبة" موجودة في الملفات المقابلة على الجهاز.

?xml
خياري. إنه يوفر المعلومات فقط لمحلل XML.
compatibility-matrix.version
مطلوب. النسخة التعريفية لمصفوفة التوافق هذه. يصف العناصر المتوقعة في مصفوفة التوافق. لا علاقة لها بإصدار XML.
compatibility-matrix.type
مطلوب. نوع مصفوفة التوافق هذه:
  • "device" : مصفوفة توافق الجهاز.
  • "framework" : مصفوفة توافق الإطار.
manifest.level
مطلوب لمصفوفة توافق الإطار. في نظام التشغيل Android 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
السمة اختيارية ويتم تعيينها افتراضيًا على خطأ. يوضح ما إذا كان 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، يجب ألا تكون موجودة على الأجهزة التي تعمل بنظام التشغيل Android 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 التي يتطلبها إطار العمل في كل إصدار 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 التي يجب مطابقتها لإصدار kernel هذا. كل عنصر 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 . تم إهماله في Android 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 على صورة النظام.