توفر الموارد التالية تفاصيل حول مواقع التعليمات البرمجية والأدوات والاختبار والترخيص.
موقع رمز قابل للاستعلام
ينتقل رمز كائن واجهة البائع القابل للاستعلام إلى system/libvintf
.
أدوات
يمكن أن تكون ملفات بيان الكتابة اليدوية ومصفوفات التوافق صعبة. استخدم الأدوات التالية لإنشاء مصفوفة بيان/توافق معيارية للبدء منها.
لشال
LSHAL هي أداة من جانب الجهاز تسرد جميع طبقات HAL المسجلة إلى hwservicemanager
وجميع تطبيقات العبور المتاحة (مثل android.hardware.foo@1.0-impl.so
) على الجهاز. يمكنه أيضًا إنشاء ملف بيان للجهاز استنادًا إلى القائمة:
adb shell su 0 /system/bin/lshal --init-vintf
لاحظ ما يلي:
- إذا تم تسجيل الحزمة في
hwservicemanager
وتم العثور عليها باعتبارها ممر HAL، فسيتم تعيين<transport>
علىhwbinder
. - لم تتم كتابة أي نسخة من SELinux في البيان. يقترح أن يتم حقن العنصر عبر
assemble_vintf
كما هو موضح أدناه. - قد يكون ملف بيان HAL الذي تم إنشاؤه غير دقيق. مطلوب الاهتمام البشري لإصلاح التناقضات بين بيان الجهاز وما يوفره موقع
vendor.img
فعليًا.
ASSEMBLE_VINTF
assemble_vintf
هي أداة من جانب المضيف تقوم بما يلي:
- التحقق من صحة مصفوفة التوافق أو ملف البيان.
- يقوم بإدخال المتغيرات في مصفوفات البيانات/التوافق المتوفرة في وقت الإنشاء ويقوم بإنشاء ملف جديد يجب تثبيته على الجهاز.
- التحقق من التوافق بين الملف الذي تم إنشاؤه والملف المزدوج الخاص به.
- إذا تم تقديم ملف البيان، فسيتم إنشاء مصفوفة توافق معيارية متوافقة مع ملف البيان بشكل اختياري.
مثال: إنشاء مصفوفة توافق الجهاز من ملف بيان إطار العمل
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 المناسبة).