توفّر المَراجع التالية تفاصيل حول مواقع الرموز البرمجية والأدوات والاختبار والترخيص.
موقع الرمز البرمجي القابل للاستعلام
يتم وضع الرمز البرمجي لكائن واجهة مورّد قابل للاستعلام في system/libvintf.
الأدوات
قد يكون إنشاء ملفات البيان ومصفوفات التوافق يدويًا أمرًا صعبًا. استخدِم الأدوات التالية لإنشاء بيان/مصفوفة توافق أساسي للبدء منه.
LSHAL
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
يجب تثبيت FCM لـ system_ext باستخدام وحدات Soong. يمكن أيضًا تثبيت FCM للمنتج باستخدام وحدات Soong، ولكن لا تحدِّد DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE إذا تم استخدام هذه الطريقة. بالإضافة إلى ذلك، يمكن تثبيت إصدارات متعدّدة من FCM للمنتج وإصدارات متعدّدة من FCM لـ system_ext باستخدام وحدات Soong.
حدِّد ما يلي:
-
حدِّد وحدة في
device/manufacturer/device_name/Android.bp. على سبيل المثال (استبدِل system_ext بـ product لـ 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 وحدة 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(external/tinyxml2) لتسلسل الكائن وإلغاء تسلسله من XML وإليه. ترخيص مشابه لترخيص BSD. -
libselinux(external/selinux/libselinux) للحصول على إصدار policydb. ترخيص الملكية العامة. -
libz(external/zlib) لفك ضغط/proc/config.gz. ترخيص مشابه لترخيص BSD. - يستخدم مشروع
libvintfترخيص Apache 2.0 (مع ملفات MODULE_LICENSE_APACHE2 وNOTICE المناسبة).