توفر الموارد التالية تفاصيل حول مواقع التعليمات البرمجية والأدوات والاختبار والترخيص.
موقع الرمز البرمجي القابل لطلب البحث
ينتقل التعليمة البرمجية لكائن واجهة البائع القابل للاستعلام إلى
system/libvintf
الأدوات
قد تواجه صعوبة في استخدام ملفات بيان الكتابة بخط اليد ومصفوفات التوافق. يمكنك استخدام الأدوات التالية لإنشاء مصفوفة بيان نموذجي/توافق نموذجي منهم.
لشال
أداة LSHAL هي أداة من جانب الجهاز تسرد جميع HALs المسجلة
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
يُرجى العلم أنّه تم ضبط جميع HALs على optional="true"
.
مثال: إنشاء توافق مع إطار عمل هيكلي مصفوفة من ملف بيان الجهاز
assemble_vintf -m --hals-only \ -i device/foo/bar/manifest.xml \ -o path/to/place/output/compatibility_matrix.xml
يُرجى العلم أنّه تم ضبط جميع HALs على 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
لتعريف منتج "المراسلة عبر السحابة الإلكترونية من Firebase"
المراسلة عبر السحابة الإلكترونية من Firebase لنظام خاص بالجهاز:
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
يجب تثبيت أداة "المراسلة عبر السحابة الإلكترونية من Firebase" في system_ext باستخدام وحدات Sayg. يمكن أيضًا تثبيت منتج "المراسلة عبر السحابة الإلكترونية من Firebase"
مع وحدات "سونغ" لا تحدد DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE
إذا كان هذا
طريقة المشروع الشائعة. بالإضافة إلى ذلك، قد يتم تضمين العديد من إصدارات "المراسلة عبر السحابة الإلكترونية من Firebase" وإصدارات System_ext للمراسلة عبر السحابة الإلكترونية من Firebase للمنتجات
باستخدام وحدات Sayg.
حدِّد ما يلي:
-
تحديد وحدة في
device/manufacturer/device_name/Android.bp
. على سبيل المثال (استبدل system_ext مع منتج "المراسلة عبر السحابة الإلكترونية من Firebase" للمنتج):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
(external/tinyxml2) لإنشاء تسلسل/إلغاء تسلسل كائن إلى/من XML. ترخيص يشبه BSD.libselinux
(external/selinux/libselinux) للحصول على policydb . ترخيص النطاق العام.libz
(خارجي/zlib) لفك الضغط/proc/config.gz
ترخيص يشبه BSD.- يستخدم مشروع واحد (
libvintf
) ترخيص Apache 2.0 (مع الالتزام بالشروط اللازمة). MODULE_LICENSE_APACHE2 وملف الإشعار).