अन्य संसाधन

यहां दिए गए संसाधनों में, कोड की लोकेशन, टूल, टेस्टिंग, और लाइसेंसिंग के बारे में जानकारी दी गई है.

कोड की जगह के बारे में क्वेरी की जा सकती है

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

हैंडराइटिंग की मेनिफ़ेस्ट फ़ाइलें और कंपैटबिलिटी मैट्रिक्स मुश्किल हो सकते हैं. यहां दिए गए टूल का इस्तेमाल करके, बॉयलरप्लेट मेनिफ़ेस्ट/कंपैटिबिलिटी मैट्रिक्स जनरेट करें.

LSHAL

LSHAL, डिवाइस पर काम करने वाला एक टूल है. यह hwservicemanager के लिए रजिस्टर किए गए सभी एचएएल और डिवाइस पर उपलब्ध सभी पासथ्रू इंप्लीमेंटेशन (जैसे, android.hardware.foo@1.0-impl.so) की सूची दिखाता है. यह सूची के आधार पर, डिवाइस मेनिफ़ेस्ट फ़ाइल भी जनरेट कर सकता है:

adb shell su 0 /system/bin/lshal --init-vintf

यहां दी गई बातों का ध्यान रखें:

  1. अगर कोई पैकेज hwservicemanager के साथ रजिस्टर किया गया है और उसे पासथ्रू एचएएल के तौर पर पाया जाता है, तो <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

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

उदाहरण: डिवाइस की मेनिफ़ेस्ट फ़ाइल से, कंकाल फ़्रेमवर्क की कंपैटबिलिटी मैट्रिक्स जनरेट करें

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

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

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

बिल्ड प्रोसेस में लगने वाले समय पर, अगर 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

इसके बाद, डिवाइस मेनिफ़ेस्ट एक्सएमएल फ़ाइलें जनरेट करने के लिए, यहां दी गई कमांड लागू की जाती हैं. ये कमांड, बिल्ड सिस्टम में लागू की जाती हैं. साथ ही, इनमें बदलाव करके लागू करने से जुड़ी जानकारी को हटा दिया जाता है:

# 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 ऑब्जेक्ट, वेंडर मेनिफ़ेस्ट और ओडीएम मेनिफ़ेस्ट को डिवाइस मेनिफ़ेस्ट के तौर पर जोड़ता है. ज़्यादा जानकारी के लिए, डिवाइस मेनिफ़ेस्ट देखें.

उदाहरण: वैरिएबल से, डिवाइस के साथ काम करने वाले सॉफ़्टवेयर की जानकारी देने वाली एक्सएमएल फ़ाइलें जनरेट करना

बिल्ड प्रोसेस में लगने वाले समय पर, अगर 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

इसके बाद, डिवाइस के साथ काम करने वाले सॉफ़्टवेयर की जानकारी देने वाली एक्सएमएल फ़ाइलें जनरेट करने के लिए, यहां दिए गए कमांड लागू किए जाते हैं. ये कमांड, बिल्ड सिस्टम में लागू किए जाते हैं. हालांकि, इन्हें लागू करने से जुड़ी जानकारी को हटा दिया जाता है:

# 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 ऑब्जेक्ट, वेंडर कंपैटिबिलिटी मैट्रिक्स का इस्तेमाल डिवाइस कंपैटिबिलिटी मैट्रिक्स के तौर पर करता है. ज़्यादा जानकारी के लिए, डिवाइस के साथ काम करने से जुड़ी जानकारी देखें.

उदाहरण: वैरिएबल से फ़्रेमवर्क मेनिफ़ेस्ट एक्सएमएल फ़ाइलें जनरेट करना

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

फ़्रेमवर्क मेनिफ़ेस्ट एक्सएमएल फ़ाइलें जनरेट करने के लिए, यहां दी गई कमांड (बिल्ड सिस्टम में, लागू करने से जुड़ी जानकारी को छोड़कर) इस्तेमाल की जाती हैं:

# 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 ऑब्जेक्ट, सिस्टम मेनिफ़ेस्ट, सिस्टम मेनिफ़ेस्ट फ़्रैगमेंट, प्रॉडक्ट मेनिफ़ेस्ट, और प्रॉडक्ट मेनिफ़ेस्ट फ़्रैगमेंट को फ़्रेमवर्क मेनिफ़ेस्ट के तौर पर जोड़ता है. ज़्यादा जानकारी के लिए, फ़्रेमवर्क मेनिफ़ेस्ट देखें.

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

प्रॉडक्ट के लिए 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 को Soong मॉड्यूल के साथ इंस्टॉल किया जाना चाहिए. प्रॉडक्ट FCM को Soong मॉड्यूल के साथ भी इंस्टॉल किया जा सकता है. अगर इस तरीके का इस्तेमाल किया जाता है, तो DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE को तय न करें. इसके अलावा, Soong मॉड्यूल के साथ प्रॉडक्ट के कई FCM वर्शन और system_ext के FCM वर्शन इंस्टॉल किए जा सकते हैं. इनके बारे में बताएं:

  • device/manufacturer/device_name/Android.bp में कोई मॉड्यूल तय करें. उदाहरण के लिए (प्रॉडक्ट के लिए, system_ext को product से बदलें):
    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 वेंडर मेनिफ़ेस्ट में आईआर एचएएल जोड़ता है. अगर BOARD_ENABLE_IR को तय नहीं किया गया है, तो assemble_vintf आईआर एचएएल को वेंडर मेनिफ़ेस्ट में नहीं जोड़ता. वेंडर मेनिफ़ेस्ट जनरेट करने के लिए, यहां दी गई कमांड (लागू करने की जानकारी को छोड़कर) इस्तेमाल की जाती हैं:

# 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) का इस्तेमाल किया जाता है. इससे ऑब्जेक्ट को एक्सएमएल में बदला जा सकता है और एक्सएमएल से ऑब्जेक्ट में बदला जा सकता है. BSD जैसा लाइसेंस.
  • policydb का वर्शन पाने के लिए, libselinux (external/selinux/libselinux) का इस्तेमाल किया जाता है. सार्वजनिक डोमेन का लाइसेंस.
  • libz (external/zlib) का इस्तेमाल /proc/config.gz को डीकंप्रेस करने के लिए किया जाता है. BSD जैसा लाइसेंस.
  • libvintf प्रोजेक्ट, Apache 2.0 लाइसेंस का इस्तेमाल करता है. इसमें MODULE_LICENSE_APACHE2 और NOTICE फ़ाइलें शामिल हैं.