जानकारी पाने के दूसरे तरीके

निम्नलिखित संसाधन कोड स्थानों, टूल, परीक्षण और लाइसेंसिंग पर विवरण प्रदान करते हैं।

क्वेरी करने योग्य कोड स्थान

क्वेरी करने योग्य विक्रेता इंटरफ़ेस ऑब्जेक्ट का कोड system/libvintf पर जाता है।

हस्तलेखन मेनिफ़ेस्ट फ़ाइलें और संगतता मैट्रिक्स कठिन हो सकते हैं। आरंभ करने के लिए बॉयलरप्लेट मेनिफेस्ट/संगतता मैट्रिक्स उत्पन्न करने के लिए निम्नलिखित टूल का उपयोग करें।

एलएसएचएएल

LSHAL एक डिवाइस-साइड टूल है जो hwservicemanager में सभी पंजीकृत HAL और डिवाइस पर सभी उपलब्ध पासथ्रू कार्यान्वयन (उदाहरण के लिए 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. जेनरेट की गई एचएएल मेनिफ़ेस्ट फ़ाइल ग़लत हो सकती है। डिवाइस मैनिफेस्ट और 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

ध्यान दें कि सभी एचएएल optional="true" पर सेट हैं।

उदाहरण: डिवाइस मेनिफेस्ट फ़ाइल से एक स्केलेटन फ्रेमवर्क संगतता मैट्रिक्स उत्पन्न करें

assemble_vintf -m --hals-only \
    -i device/foo/bar/manifest.xml \
    -o path/to/place/output/compatibility_matrix.xml

ध्यान दें कि सभी एचएएल 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 फ़ाइलें जेनरेट करें

उत्पाद FCM और डिवाइस-विशिष्ट सिस्टम FCM को परिभाषित करने के लिए निम्नलिखित चर को device/manufacturer/device_name/BoardConfig.mk में परिभाषित किया जा सकता है:

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 को सूंग मॉड्यूल के साथ स्थापित किया जाना चाहिए। उत्पाद एफसीएम को सूंग मॉड्यूल के साथ भी स्थापित किया जा सकता है; यदि इस पद्धति का उपयोग किया जाता है तो DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE को परिभाषित न करें। इसके अलावा, Soong मॉड्यूल के साथ कई उत्पाद FCM संस्करण और system_ext FCM संस्करण स्थापित किए जा सकते हैं। नीचे उल्लेख किए गए परिभाषित करो:

  • device/manufacturer/device_name/Android.bp में एक मॉड्यूल परिभाषित करें। उदाहरण के लिए (उत्पाद FCM के लिए system_ext को उत्पाद से बदलें):
    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

फिर, यदि BOARD_ENABLE_IR परिभाषित है, assemble_vintf विक्रेता मैनिफ़ेस्ट में IR HAL जोड़ता है, और यदि 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 का उपयोग करता है।

लाइसेंसिंग

  • XML में/से ऑब्जेक्ट को क्रमबद्ध/deserialize करने के लिए tinyxml2 (बाहरी/tinyxml2)। बीएसडी जैसा लाइसेंस.
  • पॉलिसीडीबी संस्करण प्राप्त करने के लिए libselinux (बाहरी/सेलिनक्स/लिबसेलिनक्स)। सार्वजनिक डोमेन लाइसेंस.
  • /proc/config.gz को डीकंप्रेस करने के लिए libz (बाहरी/zlib)। बीएसडी जैसा लाइसेंस.
  • libvintf प्रोजेक्ट Apache 2.0 लाइसेंस (उचित MODULE_LICENSE_APACHE2 और NOTICE फ़ाइलों के साथ) का उपयोग करता है।