موارد إضافية

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

موقع رمز قابل للاستعلام

ينتقل رمز كائن واجهة البائع القابل للاستعلام إلى system/libvintf .

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

لشال

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 بين بيانات البائع وبيانات ODM كبيان الجهاز. راجع بيان الجهاز للحصول على التفاصيل.

مثال: إنشاء ملفات 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 مصفوفة توافق البائع كمصفوفة توافق الجهاز. راجع مصفوفة توافق الجهاز للحصول على التفاصيل.

مثال: إنشاء ملفات 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 لتعريف المنتج FCM ونظام FCM الخاص بالجهاز:

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

يجب تثبيت System_ext FCM مع وحدات Soong. يمكن أيضًا تثبيت منتج FCM مع وحدات Soong؛ لا تقم بتعريف DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE إذا تم استخدام هذه الطريقة. بالإضافة إلى ذلك، يمكن تثبيت إصدارات FCM متعددة للمنتج وإصدارات System_ext FCM مع وحدات 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 (خارجي/selinux/libselinux) للحصول على إصدار Policydb. ترخيص المجال العام.
  • libz (خارجي/zlib) لفك الضغط /proc/config.gz . ترخيص يشبه BSD.
  • يستخدم مشروع libvintf ترخيص Apache 2.0 (مع ملفات MODULE_LICENSE_APACHE2 وNOTICE المناسبة).