GKI এবং GKI মডিউলগুলি বাকি পার্টিশন থেকে স্বাধীনভাবে আপডেট করা যেতে পারে কারণ GKI মডিউলগুলি system_dlkm
নামক সুপার ইমেজে একটি পৃথক গতিশীল পার্টিশনে থাকে। GKI মডিউলগুলি কার্নেল বিল্ড-টাইম কী জোড়া ব্যবহার করে Google দ্বারা স্বাক্ষরিত হয় এবং শুধুমাত্র GKI এর সাথে সামঞ্জস্যপূর্ণ। GKI এবং GKI মডিউলগুলির মধ্যে কোন ABI স্থায়িত্ব নেই; রানটাইম চলাকালীন সঠিকভাবে মডিউলগুলি লোড করার জন্য, GKI এবং GKI মডিউলগুলিকে একসাথে তৈরি এবং আপডেট করতে হবে।
system_dklm পার্টিশন সমর্থন বাস্তবায়ন করুন
system_dlkm
পার্টিশনটি সুপার পার্টিশনে আরেকটি ডাইনামিক পার্টিশন হিসেবে অবস্থিত। এই পার্টিশনে থাকতে পারে:
- Google বিল্ড-টাইম স্বাক্ষরিত কার্নেল মডিউল
-
depmod
শিল্পকর্ম
system_dlkm
তৈরি করুন
বিল্ডিং system_dlkm
অন্যান্য গতিশীল পার্টিশন নির্মাণের অনুরূপ প্রক্রিয়া। আপনার বিল্ডে system_dlkm
যোগ করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
BoardConfig.mk
এ, নিম্নলিখিত এন্ট্রি যোগ করুন:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
পার্টিশন তালিকায়,
system_dlkm
যোগ করুন :BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(ঐচ্ছিক) A/B এবং ভার্চুয়াল A/B ডিভাইসের জন্য, আপনার ডিভাইসের জন্য
device.mk
ফাইলে নিম্নলিখিত লাইন যোগ করুন:AB_OTA_PARTITIONS += system_dlkm
system_dlkm
এ কপি করার জন্য কার্নেল মডিউল শনাক্ত করুন
রানটাইমে সফলভাবে মডিউল লোড করার জন্য, GKI এবং GKI মডিউলগুলিকে একসাথে তৈরি করতে হবে। তাই লক্ষ্য আর্কিটেকচারের জন্য আপনাকে অবশ্যই GKI বিল্ডে কার্নেল মডিউল সনাক্ত করতে হবে এবং প্ল্যাটফর্ম তৈরির সময় system_dlkm
পার্টিশনের উত্স হিসাবে প্রদান করতে হবে।
Android 13 এর জন্য
BOARD_SYSTEM_DLKM_SRC
system_dlkm
পার্টিশন তৈরি করতে বিল্ড সিস্টেমে ইনপুট হিসাবে ডিভাইসের জন্য প্রয়োজনীয় GKI মডিউল কার্নেল অবজেক্ট ফাইল ধারণকারী ফোল্ডারে নির্দেশ করুন। যেমন:
একটি ফোল্ডারে GKI মডিউল উত্স প্রদান করুন এবং সেই ফোল্ডারে BOARD_SYSTEM_DLKM_SRC
নির্দেশ করুন৷ যেমন:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
নির্মাণের সময়, BOARD_SYSTEM_DLKM_SRC
তে তালিকাভুক্ত মডিউলগুলি $ANDROID_PRODUCT_OUT/system_dlkm
এ ইনস্টল করা হয়।
Android 14 এর জন্য
আমরা অন্যান্য *_dlkm
পার্টিশনের জন্য ব্যবহৃত ম্যাক্রো ( BOARD_*_KERNEL_MODULES
) দিয়ে বাস্তবায়নকে সুগম করেছি। ডিভাইসের জন্য প্রয়োজনীয় GKI মডিউলের তালিকা BOARD_SYSTEM_KERNEL_MODULES
ম্যাক্রো দ্বারা উল্লেখ করা উচিত। নির্মাণের সময় এই মডিউলগুলি $ANDROID_PRODUCT_OUT/system_dlkm
এ ইনস্টল করা হয়। vendor_dlkm
পার্টিশনের যে কোনো মডিউল যার system_dlkm
পার্টিশনের মডিউলের উপর নির্ভরশীলতা রয়েছে তা vendor_dlkm
পার্টিশনের জন্য modules.dep
ফাইলে সঠিক রেফারেন্স তৈরি করে। modules.dep
দ্বারা উপস্থাপিত ক্রস-পার্টিশন নির্ভরতার কারণে, যখন একটি বিক্রেতা মডিউল লোড হয়, যেকোন প্রয়োজনীয় GKI মডিউল স্বয়ংক্রিয়ভাবে লোড হয়।
উদাহরণস্বরূপ, প্রিবিল্ট থেকে GKI arm64
কার্নেল 5.15
জন্য system_dlkm
পার্টিশনে সমস্ত GKI মডিউল ইনস্টল করতে:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
রানটাইমে system_dlkm
মাউন্ট করুন
শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসাবে ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভর করে, রানটাইমে system_dlkm
পার্টিশন মাউন্ট করতে fstab
এ নিম্নলিখিত যোগ করুন:
ext4
একটি শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসাবে
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসাবে
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
পার্টিশন মাউন্ট এবং মডিউল লোডিং
first_stage_init
এর সময়, system_dlkm
পার্টিশনটি /system_dlkm
এ শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসেবে মাউন্ট করা হয়। একটি সফল মাউন্টে, /system/lib/modules
এ /system_dlkm/lib/modules
নির্দেশ করে সিম্বলিক লিঙ্ক পাওয়া যায়।
একটি বিক্রেতা প্রক্রিয়া, যেমন একটি .rc
স্ক্রিপ্ট, তারপর modules.load
এ উল্লিখিত অর্ডারের উপর ভিত্তি করে কার্নেল মডিউলগুলি লোড করতে পারে। মডিউলগুলি লোড করার জন্য বিক্রেতা প্রক্রিয়াটিকে অবশ্যই প্রতীকী লিঙ্ক /system/lib/modules
ব্যবহার করতে হবে। প্রয়োজনে, বিক্রেতা প্রক্রিয়া পরবর্তী সময়ে মডিউলগুলিও লোড করতে পারে।
SELinux
system_dlkm
পার্টিশনের প্রতিটি ফাইল system_dlkm_file
এর ফাইল প্রসঙ্গে লেবেলযুক্ত। system_dlkm
পার্টিশনে GKI মডিউল ফাইল লোড করার জন্য, মডিউলগুলি লোড করার জন্য দায়ী বিক্রেতা প্রক্রিয়াটির ভেন্ডর ডোমেনে একটি sepolicy
প্রয়োজন।
উদাহরণস্বরূপ, GKI মডিউল লোড করার জন্য Cuttlefish দ্বারা ব্যবহৃত dlkm_loader
নিম্নলিখিত অনুমতি রয়েছে shared/sepolicy/vendor/dlkm_loader.te
এ নীতি ফাইলে:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
সিস্টেম-dlkm পার্টিশন যাচাই করুন
system_dlkm
পার্টিশন যাচাই করার জন্য Google একটি GKI VTS টেস্ট কেস প্রদান করে। ম্যানুয়ালি পরীক্ষা শুরু করতে, নিম্নলিখিত atest
কমান্ডটি ব্যবহার করুন:
atest -c vts_dlkm_partition_test
GKI এবং GKI মডিউলগুলি বাকি পার্টিশন থেকে স্বাধীনভাবে আপডেট করা যেতে পারে কারণ GKI মডিউলগুলি system_dlkm
নামক সুপার ইমেজে একটি পৃথক গতিশীল পার্টিশনে থাকে। GKI মডিউলগুলি কার্নেল বিল্ড-টাইম কী জোড়া ব্যবহার করে Google দ্বারা স্বাক্ষরিত হয় এবং শুধুমাত্র GKI এর সাথে সামঞ্জস্যপূর্ণ। GKI এবং GKI মডিউলগুলির মধ্যে কোন ABI স্থায়িত্ব নেই; রানটাইম চলাকালীন সঠিকভাবে মডিউলগুলি লোড করার জন্য, GKI এবং GKI মডিউলগুলিকে একসাথে তৈরি এবং আপডেট করতে হবে।
system_dklm পার্টিশন সমর্থন বাস্তবায়ন করুন
system_dlkm
পার্টিশনটি সুপার পার্টিশনে আরেকটি ডাইনামিক পার্টিশন হিসেবে অবস্থিত। এই পার্টিশনে থাকতে পারে:
- Google বিল্ড-টাইম স্বাক্ষরিত কার্নেল মডিউল
-
depmod
শিল্পকর্ম
system_dlkm
তৈরি করুন
বিল্ডিং system_dlkm
অন্যান্য গতিশীল পার্টিশন নির্মাণের অনুরূপ প্রক্রিয়া। আপনার বিল্ডে system_dlkm
যোগ করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
BoardConfig.mk
এ, নিম্নলিখিত এন্ট্রি যোগ করুন:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
পার্টিশন তালিকায়,
system_dlkm
যোগ করুন :BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(ঐচ্ছিক) A/B এবং ভার্চুয়াল A/B ডিভাইসের জন্য, আপনার ডিভাইসের জন্য
device.mk
ফাইলে নিম্নলিখিত লাইন যোগ করুন:AB_OTA_PARTITIONS += system_dlkm
system_dlkm
এ কপি করার জন্য কার্নেল মডিউল শনাক্ত করুন
রানটাইমে সফলভাবে মডিউল লোড করার জন্য, GKI এবং GKI মডিউলগুলিকে একসাথে তৈরি করতে হবে। তাই লক্ষ্য আর্কিটেকচারের জন্য আপনাকে অবশ্যই GKI বিল্ডে কার্নেল মডিউল সনাক্ত করতে হবে এবং প্ল্যাটফর্ম তৈরির সময় system_dlkm
পার্টিশনের উত্স হিসাবে প্রদান করতে হবে।
Android 13 এর জন্য
BOARD_SYSTEM_DLKM_SRC
system_dlkm
পার্টিশন তৈরি করতে বিল্ড সিস্টেমে ইনপুট হিসাবে ডিভাইসের জন্য প্রয়োজনীয় GKI মডিউল কার্নেল অবজেক্ট ফাইল ধারণকারী ফোল্ডারে নির্দেশ করুন। যেমন:
একটি ফোল্ডারে GKI মডিউল উত্স প্রদান করুন এবং সেই ফোল্ডারে BOARD_SYSTEM_DLKM_SRC
নির্দেশ করুন৷ যেমন:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
নির্মাণের সময়, BOARD_SYSTEM_DLKM_SRC
তে তালিকাভুক্ত মডিউলগুলি $ANDROID_PRODUCT_OUT/system_dlkm
এ ইনস্টল করা হয়।
Android 14 এর জন্য
আমরা অন্যান্য *_dlkm
পার্টিশনের জন্য ব্যবহৃত ম্যাক্রো ( BOARD_*_KERNEL_MODULES
) দিয়ে বাস্তবায়নকে সুগম করেছি। ডিভাইসের জন্য প্রয়োজনীয় GKI মডিউলের তালিকা BOARD_SYSTEM_KERNEL_MODULES
ম্যাক্রো দ্বারা উল্লেখ করা উচিত। নির্মাণের সময় এই মডিউলগুলি $ANDROID_PRODUCT_OUT/system_dlkm
এ ইনস্টল করা হয়। vendor_dlkm
পার্টিশনের যে কোনো মডিউল যার system_dlkm
পার্টিশনের মডিউলের উপর নির্ভরশীলতা রয়েছে তা vendor_dlkm
পার্টিশনের জন্য modules.dep
ফাইলে সঠিক রেফারেন্স তৈরি করে। modules.dep
দ্বারা উপস্থাপিত ক্রস-পার্টিশন নির্ভরতার কারণে, যখন একটি বিক্রেতা মডিউল লোড হয়, যেকোন প্রয়োজনীয় GKI মডিউল স্বয়ংক্রিয়ভাবে লোড হয়।
উদাহরণস্বরূপ, প্রিবিল্ট থেকে GKI arm64
কার্নেল 5.15
জন্য system_dlkm
পার্টিশনে সমস্ত GKI মডিউল ইনস্টল করতে:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
রানটাইমে system_dlkm
মাউন্ট করুন
শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসাবে ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভর করে, রানটাইমে system_dlkm
পার্টিশন মাউন্ট করতে fstab
এ নিম্নলিখিত যোগ করুন:
ext4
একটি শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসাবে
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসাবে
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
পার্টিশন মাউন্ট এবং মডিউল লোডিং
first_stage_init
এর সময়, system_dlkm
পার্টিশনটি /system_dlkm
এ শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম হিসেবে মাউন্ট করা হয়। একটি সফল মাউন্টে, /system/lib/modules
এ /system_dlkm/lib/modules
নির্দেশ করে সিম্বলিক লিঙ্ক পাওয়া যায়।
একটি বিক্রেতা প্রক্রিয়া, যেমন একটি .rc
স্ক্রিপ্ট, তারপর modules.load
এ উল্লিখিত অর্ডারের উপর ভিত্তি করে কার্নেল মডিউলগুলি লোড করতে পারে। মডিউলগুলি লোড করার জন্য বিক্রেতা প্রক্রিয়াটিকে অবশ্যই প্রতীকী লিঙ্ক /system/lib/modules
ব্যবহার করতে হবে। প্রয়োজনে, বিক্রেতা প্রক্রিয়া পরবর্তী সময়ে মডিউলগুলিও লোড করতে পারে।
SELinux
system_dlkm
পার্টিশনের প্রতিটি ফাইলকে system_dlkm_file
এর ফাইল প্রসঙ্গে লেবেল করা হয়। system_dlkm
পার্টিশনে GKI মডিউল ফাইল লোড করার জন্য, মডিউলগুলি লোড করার জন্য দায়ী বিক্রেতা প্রক্রিয়াটির ভেন্ডর ডোমেনে একটি sepolicy
প্রয়োজন।
উদাহরণস্বরূপ, GKI মডিউল লোড করার জন্য Cuttlefish দ্বারা ব্যবহৃত dlkm_loader
নিম্নলিখিত অনুমতি রয়েছে shared/sepolicy/vendor/dlkm_loader.te
এ নীতি ফাইলে:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
সিস্টেম-dlkm পার্টিশন যাচাই করুন
system_dlkm
পার্টিশন যাচাই করার জন্য Google একটি GKI VTS টেস্ট কেস প্রদান করে। ম্যানুয়ালি পরীক্ষা শুরু করতে, নিম্নলিখিত atest
কমান্ডটি ব্যবহার করুন:
atest -c vts_dlkm_partition_test