यहां दिए गए संसाधनों में, कोड की जगहों, टूल, जांच, और लाइसेंस के बारे में जानकारी दी गई है.
क्वेरी करने लायक कोड की जगह
क्वेरी करने लायक वेंडर इंटरफ़ेस ऑब्जेक्ट का कोड, system/libvintf
पर जाता है.
टूल
मेनिफ़ेस्ट फ़ाइलों और कम्पैटबिलिटी मैट्रिक को मैन्युअल तरीके से तैयार करना मुश्किल हो सकता है. इन टूल का इस्तेमाल करके, शुरुआत के लिए कोई बॉयलरप्लेट मेनिफ़ेस्ट/काम करने की क्षमता वाला मैट्रिक जनरेट करें.
LSHAL
LSHAL, डिवाइस पर मौजूद एक टूल है. इसमें hwservicemanager
के लिए रजिस्टर किए गए सभी एचएएल और डिवाइस पर उपलब्ध सभी पासथ्रू लागू करने की सुविधाओं (उदाहरण के लिए, android.hardware.foo@1.0-impl.so
) की सूची होती है. यह सूची के आधार पर, डिवाइस मेनिफ़ेस्ट फ़ाइल भी जनरेट कर सकता है:
adb shell su 0 /system/bin/lshal --init-vintf
यहां दी गई बातों का ध्यान रखें:
- अगर कोई पैकेज
hwservicemanager
के लिए रजिस्टर है और उसे पासथ्रू एचएएल के तौर पर पाया जाता है, तो<transport>
कोhwbinder
पर सेट किया जाता है. - मेनिफ़ेस्ट में SELinux का कोई वर्शन नहीं लिखा गया है. हमारा सुझाव है कि एलिमेंट को
assemble_vintf
के ज़रिए इंजेक्ट किया जाए, जैसा कि यहां बताया गया है. - जनरेट की गई एचएएल मेनिफ़ेस्ट फ़ाइल गलत हो सकती है. डिवाइस मेनिफ़ेस्ट और
vendor.img
के उपलब्ध कराए गए डेटा के बीच अंतर को ठीक करने के लिए, किसी व्यक्ति की ज़रूरत होती है.
ASSEMBLE_VINTF
assemble_vintf
, होस्ट-साइड टूल है, जो:
- यह पुष्टि करता है कि कंपैटिबिलिटी मैट्रिक्स या मेनिफ़ेस्ट फ़ाइल मान्य है या नहीं.
- यह बिल्ड के समय उपलब्ध मेनिफ़ेस्ट/काम करने के तरीके के मैट्रिक्स में वैरिएबल इंजेक्ट करता है. साथ ही, एक नई फ़ाइल जनरेट करता है, जिसे डिवाइस पर इंस्टॉल किया जाना चाहिए.
- जनरेट की गई फ़ाइल और उसके डुप्लीकेट वर्शन के बीच काम करने की जांच करता है.
- अगर कोई मेनिफ़ेस्ट फ़ाइल दी जाती है, तो मेनिफ़ेस्ट फ़ाइल के साथ काम करने वाला, बोलरप्लेट के तौर पर काम करने वाला मैट्रिक्स जनरेट किया जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.
उदाहरण: फ़्रेमवर्क मेनिफ़ेस्ट फ़ाइल से डिवाइस के साथ काम करने की जानकारी वाला मैट्रिक्स जनरेट करना
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 ऑब्जेक्ट, सिस्टम मेनिफ़ेस्ट, सिस्टम मेनिफ़ेस्ट के फ़्रैगमेंट, प्रॉडक्ट मेनिफ़ेस्ट, और प्रॉडक्ट मेनिफ़ेस्ट के फ़्रैगमेंट को फ़्रेमवर्क मेनिफ़ेस्ट के तौर पर जोड़ता है. ज़्यादा जानकारी के लिए, फ़्रेमवर्क मेनिफ़ेस्ट देखें.
उदाहरण: वैरिएबल से फ़्रेमवर्क की कंपैटबिलिटी मैट्रिक एक्सएमएल फ़ाइलें जनरेट करना
प्रॉडक्ट एफ़सीएम और डिवाइस के हिसाब से सिस्टम एफ़सीएम तय करने के लिए, 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
में कोई मॉड्यूल तय करें. उदाहरण के लिए, प्रॉडक्ट के लिए 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
फ़्रेमवर्क के साथ काम करने वाले मैट्रिक्स की एक्सएमएल फ़ाइलें जनरेट करने के लिए, यहां दिए गए कमांड चलाए जाते हैं. इन्हें बिल्ड सिस्टम में, लागू करने की जानकारी हटाने के लिए बदला गया है:
# 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 का इस्तेमाल करता है.
लाइसेंस देना
tinyxml2
(external/tinyxml2), ऑब्जेक्ट को एक्सएमएल में सेरियलाइज़/डिस-सेरियलाइज़ करने के लिए. BSD-like लाइसेंस.libselinux
(external/selinux/libselinux) का इस्तेमाल करके, policydb का वर्शन पाएं. पब्लिक डोमेन लाइसेंस.libz
(external/zlib) का इस्तेमाल करके,/proc/config.gz
को डिकंप्रेस करें. BSD-like लाइसेंस.libvintf
प्रोजेक्ट में, Apache 2.0 लाइसेंस का इस्तेमाल किया गया है. साथ ही, इसमें सही MODULE_LICENSE_APACHE2 और NOTICE फ़ाइलें मौजूद हैं.