مصادر إضافية

تقدّم الموارد التالية تفاصيل عن مواقع الرموز البرمجية والأدوات والاختبار والترخيص.

الموقع الجغرافي للرمز الذي يمكن إجراء طلب بحث عنه

ينتقل رمز عنصر واجهة المورّد القابل للبحث عنه إلى system/libvintf.

قد يكون من الصعب قراءة ملفات البيان ومصفّحات التوافق المكتوبة بخط اليد. استخدِم الأدوات التالية لإنشاء نموذج بيان/مصفوفة توافق لاستخدامه كأساس.

LSHAL

‫LSHAL هي أداة على الجهاز تُدرج جميع واجهات HAL المسجَّلة لملف تعريف برمجة التطبيقات hwservicemanager وجميع عمليات التنفيذ المتاحة للمرور المباشر (مثل android.hardware.foo@1.0-impl.so) على الجهاز. ويمكنه أيضًا إنشاء ملف بيان الجهاز استنادًا إلى القائمة:

adb shell su 0 /system/bin/lshal --init-vintf

ملاحظات:

  1. إذا تم تسجيل حزمة على hwservicemanager ووجدت كوحدة HAL للمرور، يتم ضبط <transport> على hwbinder.
  2. لم يتم كتابة أي إصدار من SELinux في البيان. نقترح إدخال العنصر من خلال assemble_vintf كما هو موضّح أدناه.
  3. قد يكون ملف بيان HAL الذي تم إنشاؤه غير دقيق. يجب معالجة هذه المشكلة من قِبل أحد الأشخاص، لأنّه يتعذّر حلّ التناقضات بين بيان التطبيق المتوافق مع الجهاز وما يوفّره تطبيق vendor.img.

ASSEMBLE_VINTF

assemble_vintf هي أداة من جهة المضيف تؤدي إلى ما يلي:

  1. للتحقّق من صلاحية مصفوفة التوافق أو ملف البيان
  2. تُستخدَم هذه الأداة لإدراج متغيّرات في ملفات البيان أو مصفوفات التوافق المتاحة أثناء عملية الإنشاء، وإنشاء ملف جديد يجب تثبيته على الجهاز.
  3. تتحقّق من التوافق بين الملف الذي تم إنشاؤه ونظيره.
  4. في حال توفّر ملف بيان، يتم بشكل اختياري إنشاء نموذج قياسي لمصفوفة التوافق المتوافقة مع ملف البيان.

مثال: إنشاء جدول التوافق مع الأجهزة من ملف بيان إطار عمل

assemble_vintf -m --hals-only \
    -i system/libhidl/manifest.xml \
    -o device/manufacturer/device_name/compatibility_matrix.xml

يُرجى العلم أنّه تم ضبط جميع HAL على optional="true".

مثال: إنشاء جدول كثافة توافق إطار العمل من ملف بيان الجهاز

assemble_vintf -m --hals-only \
    -i device/foo/bar/manifest.xml \
    -o path/to/place/output/compatibility_matrix.xml

يُرجى العلم أنّه تم ضبط جميع HAL على optional="true".

مثال: إنشاء ملفات XML لبيان الجهاز من المتغيّرات

في وقت التصميم، إذا تم تحديد المتغيّرات التالية في device/manufacturer/device_name/BoardConfig.mk:

# Vendor manifest is named DEVICE_MANIFEST_FILE for legacy reasons.
DEVICE_MANIFEST_FILE := \
    device/manufacturer/device_name/vendor_manifest.xml
ODM_MANIFEST_FILES := \
    device/manufacturer/device_name/odm_manifest.xml
ODM_MANIFEST_SKUS := sku1 sku2
ODM_MANIFEST_SKU1_FILES := \
    device/manufacturer/device_name/odm_manifest_sku1.xml
ODM_MANIFEST_SKU2_FILES := \
    device/manufacturer/device_name/odm_manifest_sku2.xml

بعد ذلك، يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ ) لإنشاء ملفات XML لبيان الجهاز:

# vendor manifest; only when DEVICE_MANIFEST_FILE is set
BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) assemble_vintf \
    $(addprefix,-i ,$(DEVICE_MANIFEST_FILE)) \
    -o $(TARGET_OUT_VENDOR)/etc/vintf/manifest.xml

# ODM manifests
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest.xml

# ODM manifests for each sku
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_SKU1_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku1.xml
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_SKU2_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku2.xml

أثناء التشغيل، يجمع عنصر VINTF بين بيانات المورّدين وبيانات المصنّعين الأصليين للأجهزة لإنشاء بيان الجهاز. راجِع ملف IDE manifest للاطّلاع على التفاصيل.

مثال: إنشاء ملفات XML لمصفوفة توافق الأجهزة من المتغيّرات

في وقت التصميم، إذا تم تحديد المتغيّرات التالية في device/manufacturer/device_name/BoardConfig.mk:

# vendor compatibility matrix is named DEVICE_MATRIX_FILE for legacy reasons.
DEVICE_MATRIX_FILE := \
    device/manufacturer/device_name/vendor_compatibility_matrix.xml \
    device/manufacturer/device_name/vendor_compatibility_matrix_additional.xml

بعد ذلك، يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ) لإنشاء ملفات XML لمصفّحة توافق الأجهزة:

# vendor compatibility matrix; only when DEVICE_MATRIX_FILE is set
assemble_vintf \
    $(addprefix,-i ,$(DEVICE_MATRIX_FILE)) \
    -o $(TARGET_OUT_VENDOR)/etc/vintf/compatibility_matrix.xml

أثناء التشغيل، يستخدم عنصر VINTF مصفوفة توافق المورّد بصفته مصفوفة توافق الجهاز. اطّلِع على جدول ملفّات APK المتوافقة مع الأجهزة لمعرفة التفاصيل.

مثال: إنشاء ملفات XML لبيان إطار العمل من المتغيّرات

يمكن تحديد المتغيّرات التالية في device/manufacturer/device_name/BoardConfig.mk:

# Device-specific system manifest is named DEVICE_FRAMEWORK_MANIFEST_FILE for legacy reasons
DEVICE_FRAMEWORK_MANIFEST_FILE := \
    device/manufacturer/device_name/device_system_manifest.xml

# Product manifest
PRODUCT_MANIFEST_FILES := \
    device/manufacturer/device_name/product_manifest.xml

يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ) لإنشاء ملفات XML لبيان إطار العمل:

# system manifest
assemble_vintf \
    -i system/libhidl/vintfdata/manifest.xml \
    $(addprefix,-i ,$(DEVICE_FRAMEWORK_MANIFEST_FILE)) \
    -o $(TARGET_OUT)/etc/vintf/manifest.xml

# product manifest
assemble_vintf \
    $(addprefix,-i ,$(PRODUCT_MANIFEST_FILES)) \
    -o $(TARGET_OUT_PRODUCT)/etc/vintf/manifest.xml

أثناء التشغيل، يجمع عنصر VINTF بين بيان النظام واقتباسات بيان النظام ومقتطفات بيان المنتج ومقتطفات بيان المنتج كبيان إطار العمل. اطّلِع على ملف بيان الإطار العمل للاطّلاع على التفاصيل.

مثال: إنشاء ملفات XML لمصفوفة توافق الإطارات من المتغيّرات

يمكن تحديد المتغيّرات التالية في device/manufacturer/device_name/BoardConfig.mk لتحديد "إشعارات Google من أجل المطوّرين" للمنتج و"إشعارات Google من أجل المطوّرين" الخاصة بالنظام والخاصة بالجهاز:

DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := \
    device/manufacturer/device_name/product_compatibility_matrix.xml
# Device-specific system compatibility matrix is named
# DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE for legacy reasons.
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \
    device/manufacturer/device_name/device_system_compatibility_matrix.xml

يجب تثبيت نظام FCM في نظام التشغيل system_ext باستخدام وحدات Soong. يمكن أيضًا تثبيت حزمة FCM للمنتج باستخدام وحدات Soong، ولا تحدِّد DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE في حال استخدام هذه الطريقة. بالإضافة إلى ذلك، قد يتم تثبيت إصدارات متعددة من FCM للمنتجات وإصدارات FCM من system_ext باستخدام وحدات Soong. حدِّد ما يلي:

  • حدِّد وحدة في device/manufacturer/device_name/Android.bp. على سبيل المثال (استبدِل system_ext بمنتج لنظام إدارة الموافقة (FCM) للمنتج):
    vintf_compatibility_matrix {
        name: "system_ext_compatibility_matrix.xml",
        stem: "compatibility_matrix.xml",
        system_ext_specific: true,
        // product_specific: true, // for product FCM
        srcs: [
            "system_ext_compatibility_matrix.xml",
        ],
    }
  • ثبِّت الوحدة على device/manufacturer/device_name/device.mk. مثلاً:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml

يتم تنفيذ الأوامر التالية (في نظام الإنشاء، تم تعديلها لحذف تفاصيل التنفيذ) لإنشاء ملفات XML لمصفّحة توافق الإطارات:

# common system compatibility matrix for each FCM version
BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \
POLICYVERS=$(POLICYVERS) \
BOARD_AVB_VBMETA_VERSION=$(BOARD_AVB_VBMETA_VERSION)
assemble_vintf \
    -i hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml
    $(addprefix,-i ,$(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)) \
    -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.device.xml

# framework compatibility matrixes at each FCM version
assemble_vintf
    -i hardware/interfaces/compatibility_matrices/compatibility_matrix.{level}.xml \
    -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.{level}.xml \
    --kernel=...

# product framework compatibility matrix; only when
# DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE is set or when the Soong module for
# product FCM is defined
assemble_vintf
    -i $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE)
    -o $(TARGET_OUT_PRODUCT)/etc/vintf/compatibility_matrix.xml

# system_ext framework compatibility matrix; only when the Soong module for
# system_ext FCM is defined
assemble_vintf
    -i <srcs for the soong module>
    -o $(TARGET_OUT_SYSTEM_EXT)/etc/vintf/compatibility_matrix.xml

أثناء التشغيل، يجمع عنصر VINTF مجموعة فرعية من مصفوفات ملف التوافق مع النظام ومصفوفات التوافق مع المنتجات على أنّها مصفوفة التوافق مع إطار العمل. اطّلِع على مخطّط متوافقة للاطّلاع على التفاصيل.

مثال: إنشاء بيان المورّد من الأجزاء

يمكن تجميع عدة أجزاء من بيان المورّد في وقت الإنشاء. مثلاً:

<!-- device/manufacturer/device_name/manifest_common.xml -->
<manifest version="1.0" type="device">
    <!-- common HALs here -->
</manifest>
<!-- device/manufacturer/device_name/ir.xml -->
<manifest version="1.0" type="device">
    <hal>
        <name>android.hardware.ir</name>
        <version>1.0</version>
        <!-- other fields -->
    </hal>
</manifest>
# device/manufacturer/device_name/BoardConfig.mk
DEVICE_MANIFEST_FILE := device/manufacturer/device_name/manifest_common.xml
ifdef BOARD_ENABLE_IR
    DEVICE_MANIFEST_FILE += device/manufacturer/device_name/ir.xml
endif

بعد ذلك، تُضيف assemble_vintf واجهة برمجة التطبيقات IR HAL إلى بيان المورّد إذا كان BOARD_ENABLE_IR محدّدًا، وتحذفه إذا كان BOARD_ENABLE_IR غير محدّد. يتم تنفيذ الأوامر التالية (المعدَّلة لحذف تفاصيل التنفيذ) لإنشاء بيان المورّد:

# if BOARD_ENABLE_IR is defined
BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \
    -i device/manufacturer/device_name/manifest_common.xml:device/manufacturer/device_name/ir.xml \
    -o $(TARGET_OUT_VENDOR)/manifest.xml

# if BOARD_ENABLE_IR is not defined
BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \
    -i device/manufacturer/device_name/manifest_common.xml \
    -o $(TARGET_OUT_VENDOR)/manifest.xml

لمعرفة التفاصيل، راجع:

assemble_vintf --help

الاختبار

يستخدم مشروع platform/system/libvintf مكتبة GTest لسلسلة رسائل برمجية وتحويلها إلى تنسيق ثنائي وفحص التوافق.

الترخيص

  • tinyxml2 (خارجية/tinyxml2) لتسلسل/إلغاء تسلسل العنصر إلى/من XML ترخيص مشابه لترخيص BSD
  • libselinux (external/selinux/libselinux) للحصول على إصدار policydb. ترخيص محتوى متاح للجميع
  • libz (خارجية/zlib) لفك الضغط عن /proc/config.gz. ترخيص مشابه لترخيص BSD
  • يستخدم مشروع libvintf ترخيص Apache 2.0 (مع الملفَين المناسبَين MODULE_LICENSE_APACHE2 وNOTICE).