GKI এবং GKI মডিউলগুলোকে পার্টিশনের বাকি অংশ থেকে স্বাধীনভাবে আপডেট করা যায়, কারণ GKI মডিউলগুলো সুপার ইমেজের system_dlkm নামক একটি পৃথক ডাইনামিক পার্টিশনে থাকে। GKI মডিউলগুলো কার্নেল বিল্ড-টাইম কী পেয়ার ব্যবহার করে গুগল দ্বারা স্বাক্ষরিত হয় এবং শুধুমাত্র সেই GKI-এর সাথেই সামঞ্জস্যপূর্ণ যা দিয়ে এগুলো বিল্ড করা হয়েছে। GKI এবং GKI মডিউলগুলোর মধ্যে কোনো ABI স্থিতিশীলতা নেই; রানটাইমের সময় মডিউলগুলো সঠিকভাবে লোড হওয়ার জন্য, GKI এবং GKI মডিউলগুলোকে অবশ্যই একসাথে বিল্ড এবং আপডেট করতে হবে।
system_dklm পার্টিশন সমর্থন বাস্তবায়ন করুন
system_dlkm পার্টিশনটি সুপার পার্টিশনে আরেকটি ডাইনামিক পার্টিশন হিসেবে অবস্থিত। এই পার্টিশনে থাকতে পারে:
- গুগল বিল্ড-টাইম স্বাক্ষরিত কার্নেল মডিউল
-
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 পার্টিশনের জন্য সেটিকে সোর্স হিসেবে সরবরাহ করতে হবে।
অ্যান্ড্রয়েড ১৩ এর জন্য
system_dlkm পার্টিশন তৈরি করার জন্য বিল্ড সিস্টেমে ইনপুট হিসেবে, ডিভাইসটির জন্য প্রয়োজনীয় GKI মডিউল এবং কার্নেল অবজেক্ট ফাইল ধারণকারী একটি ফোল্ডারকে BOARD_SYSTEM_DLKM_SRC দিকে নির্দেশ করুন। উদাহরণস্বরূপ:
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 এ ইনস্টল করা হয়।
অ্যান্ড্রয়েড ১৪ এর জন্য
আমরা অন্যান্য *_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 থাকা প্রয়োজন।
উদাহরণস্বরূপ, Cuttlefish দ্বারা GKI মডিউল লোড করার জন্য ব্যবহৃত 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;
সিস্টেম-ডিএলকেএম পার্টিশন যাচাই করুন
system_dlkm পার্টিশনটি যাচাই করার জন্য গুগল একটি GKI VTS টেস্ট কেস প্রদান করে। ম্যানুয়ালি টেস্টটি চালু করতে, নিম্নলিখিত atest কমান্ডটি ব্যবহার করুন:
atest -c vts_dlkm_partition_test