निम्नलिखित संसाधन कोड स्थान, उपकरण, परीक्षण और लाइसेंसिंग पर विवरण प्रदान करते हैं।
क्वेरी करने योग्य कोड स्थान
क्वेरी करने योग्य विक्रेता इंटरफ़ेस ऑब्जेक्ट का कोड system/libvintf
पर जाता है।
औजार
हस्तलेखन मेनिफेस्ट फ़ाइलें और संगतता मैट्रिक्स कठिन हो सकते हैं। शुरू करने के लिए बॉयलरप्लेट मेनिफेस्ट/संगतता मैट्रिक्स उत्पन्न करने के लिए निम्न टूल का उपयोग करें।
LSHAL
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
ध्यान दें कि सभी एचएएल 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 ऑब्जेक्ट विक्रेता मैनिफ़ेस्ट को जोड़ती है और 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
फिर डिवाइस संगतता मैट्रिक्स एक्सएमएल फाइलें उत्पन्न करने के लिए निम्न आदेश निष्पादित किए जाते हैं (निर्माण प्रणाली में, कार्यान्वयन विवरण को छोड़ने के लिए संशोधित):
# 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 को जल्द ही मॉड्यूल के साथ स्थापित किया जाना चाहिए। उत्पाद FCM भी सूंग मॉड्यूल के साथ स्थापित किया जा सकता है; यदि इस पद्धति का उपयोग किया जाता है तो DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE
को परिभाषित न करें। इसके अलावा, सूंग मॉड्यूल के साथ कई उत्पाद 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
फिर, अगर assemble_vintf
परिभाषित है, तो BOARD_ENABLE_IR
विक्रेता मेनिफेस्ट में 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
(बाहरी/tinyxml2) ऑब्जेक्ट को एक्सएमएल से/से क्रमबद्ध/deserializing के लिए। बीएसडी जैसा लाइसेंस। -
libselinux
(बाहरी/selinux/libselinux)। सार्वजनिक डोमेन लाइसेंस। -
libz
(बाहरी/zlib)/proc/config.gz
को डीकंप्रेस करने के लिए। बीएसडी जैसा लाइसेंस। -
libvintf
प्रोजेक्ट Apache 2.0 लाइसेंस (उपयुक्त MODULE_LICENSE_APACHE2 और नोटिस फ़ाइलों के साथ) का उपयोग करता है।