অতিরিক্ত সম্পদ

নিম্নলিখিত রিসোর্সগুলিতে কোডের অবস্থান, টুলস, টেস্টিং এবং লাইসেন্সিং সম্পর্কে বিস্তারিত তথ্য দেওয়া হয়েছে।

অনুসন্ধানযোগ্য কোডের অবস্থান

কোয়েরিযোগ্য ভেন্ডর ইন্টারফেস অবজেক্টের কোড system/libvintf এ থাকে।

হাতে লিখে ম্যানিফেস্ট ফাইল এবং কম্প্যাটিবিলিটি ম্যাট্রিক্স তৈরি করা কঠিন হতে পারে। কাজ শুরু করার জন্য একটি বয়লারপ্লেট ম্যানিফেস্ট/কম্প্যাটিবিলিটি ম্যাট্রিক্স তৈরি করতে নিম্নলিখিত টুলগুলো ব্যবহার করুন।

এলশাল

LSHAL হলো একটি ডিভাইস-সাইড টুল যা hwservicemanager এ রেজিস্টার করা সমস্ত HAL এবং ডিভাইসে উপলব্ধ সমস্ত পাসথ্রু ইমপ্লিমেন্টেশন (যেমন android.hardware.foo@1.0-impl.so ) তালিকাভুক্ত করে। এটি এই তালিকার উপর ভিত্তি করে একটি ডিভাইস ম্যানিফেস্ট ফাইলও তৈরি করতে পারে।

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

নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:

  1. যদি কোনো প্যাকেজ hwservicemanager এ নিবন্ধিত থাকে এবং একটি passthrough HAL হিসেবেও পাওয়া যায়, তাহলে <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

উল্লেখ্য যে, সমস্ত HAL-কে optional="true" হিসেবে সেট করা আছে।

উদাহরণ: একটি ডিভাইস ম্যানিফেস্ট ফাইল থেকে একটি স্কেলেটন ফ্রেমওয়ার্ক সামঞ্জস্য ম্যাট্রিক্স তৈরি করুন।

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

উল্লেখ্য যে, সমস্ত HAL-কে 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 ফাইল তৈরি করুন

প্রোডাক্ট এফসিএম এবং ডিভাইস-নির্দিষ্ট সিস্টেম এফসিএম নির্ধারণ করার জন্য 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 মডিউলগুলির সাথে ইনস্টল করতে হবে। product FCM-ও Soong মডিউলগুলির সাথে ইনস্টল করা যেতে পারে; এই পদ্ধতি ব্যবহার করা হলে DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE সংজ্ঞায়িত করবেন না। এছাড়াও, একাধিক product FCM সংস্করণ এবং system_ext FCM সংস্করণ Soong মডিউলগুলির সাথে ইনস্টল করা যেতে পারে। নিম্নলিখিতগুলি সংজ্ঞায়িত করুন:

  • device/manufacturer/device_name/Android.bp তে একটি মডিউল সংজ্ঞায়িত করুন। উদাহরণস্বরূপ (FCM প্রোডাক্টের জন্য 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 ভেন্ডর ম্যানিফেস্টে 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-এ অবজেক্ট সিরিয়ালাইজ/ডিসেরিয়ালাইজ করার জন্য tinyxml2 (external/tinyxml2)। বিএসডি-সদৃশ লাইসেন্স।
  • policydb সংস্করণ পাওয়ার জন্য libselinux (external/selinux/libselinux) ব্যবহার করুন। পাবলিক ডোমেইন লাইসেন্স।
  • /proc/config.gz ডিকম্প্রেস করার জন্য libz (external/zlib)। বিএসডি-সদৃশ লাইসেন্স।
  • libvintf প্রজেক্টটি অ্যাপাচি ২.০ লাইসেন্স ব্যবহার করে (যথাযথ MODULE_LICENSE_APACHE2 এবং NOTICE ফাইলসহ)।