مراجع إضافية

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

موقع الرمز البرمجي القابل لطلب البحث

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

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

لشال

أداة LSHAL هي أداة من جانب الجهاز تسرد جميع HALs المسجلة 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

يُرجى العلم أنّه تم ضبط جميع 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 وملف الإشعار).