নিম্নলিখিত সংস্থান কোড অবস্থান, সরঞ্জাম, পরীক্ষা, এবং লাইসেন্সিং সম্পর্কে বিশদ প্রদান করে।
প্রশ্নযোগ্য কোড অবস্থান
অনুসন্ধানযোগ্য বিক্রেতা ইন্টারফেস অবজেক্টের কোড system/libvintf
এ যায়।
টুলস
হস্তাক্ষর ম্যানিফেস্ট ফাইল এবং সামঞ্জস্য ম্যাট্রিক্স কঠিন হতে পারে। শুরু করার জন্য একটি বয়লারপ্লেট ম্যানিফেস্ট/কম্প্যাটিবিলিটি ম্যাট্রিক্স তৈরি করতে নিম্নলিখিত টুলগুলি ব্যবহার করুন।
এলএসএইচএল
LSHAL হল একটি ডিভাইস-সাইড টুল যা hwservicemanager
এ সমস্ত নিবন্ধিত HAL এবং ডিভাইসে উপলব্ধ সমস্ত পাসথ্রু বাস্তবায়ন (যেমন 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
মনে রাখবেন যে সমস্ত 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 ম্যানিফেস্টকে ডিভাইস ম্যানিফেস্ট হিসেবে একত্রিত করে। বিস্তারিত জানার জন্য ডিভাইস ম্যানিফেস্ট দেখুন।
উদাহরণ: ভেরিয়েবল থেকে ডিভাইস সামঞ্জস্যপূর্ণ ম্যাট্রিক্স এক্সএমএল ফাইল তৈরি করুন
বিল্ড টাইমে, যদি নিম্নলিখিত ভেরিয়েবলগুলিকে 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 অবজেক্টটি ডিভাইসের সামঞ্জস্যের ম্যাট্রিক্স হিসাবে বিক্রেতা সামঞ্জস্যতা ম্যাট্রিক্স ব্যবহার করে। বিস্তারিত জানার জন্য ডিভাইস সামঞ্জস্যতা ম্যাট্রিক্স দেখুন।
উদাহরণ: ভেরিয়েবল থেকে ফ্রেমওয়ার্ক ম্যানিফেস্ট 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
ফ্রেমওয়ার্ক ম্যানিফেস্ট এক্সএমএল ফাইল তৈরি করতে নিম্নলিখিত কমান্ডগুলি কার্যকর করা হয় (বিল্ড সিস্টেমে, বাস্তবায়নের বিবরণ বাদ দেওয়ার জন্য পরিবর্তিত):
# 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
সংজ্ঞায়িত করবেন না৷ এছাড়াও, একাধিক পণ্য FCM সংস্করণ এবং system_ext FCM সংস্করণগুলি Soong মডিউলগুলির সাথে ইনস্টল করা যেতে পারে। নিম্নলিখিত সংজ্ঞায়িত করুন:
-
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
বিক্রেতা ম্যানিফেস্টে 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
(বহিরাগত/tinyxml2) XML-এ/থেকে অবজেক্টকে সিরিয়ালাইজ/ডিসারিয়ালাইজ করার জন্য। BSD-এর মতো লাইসেন্স। -
libselinux
(external/selinux/libselinux) পলিসিডিবি সংস্করণ পাওয়ার জন্য। পাবলিক ডোমেইন লাইসেন্স। -
libz
(external/zlib) ডিকম্প্রেস করার জন্য/proc/config.gz
। BSD-এর মতো লাইসেন্স। -
libvintf
প্রকল্প Apache 2.0 লাইসেন্স ব্যবহার করে (উপযুক্ত MODULE_LICENSE_APACHE2 এবং NOTICE ফাইল সহ)।