একটি GKI মডিউল পার্টিশন প্রয়োগ করুন

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 যোগ করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. 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
    
  2. পার্টিশন তালিকায়, system_dlkm যোগ করুন : BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (ঐচ্ছিক) 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 যোগ করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. 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
    
  2. পার্টিশন তালিকায়, system_dlkm যোগ করুন : BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (ঐচ্ছিক) 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