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

GKI এবং GKI মডিউলকে বাকি পার্টিশন থেকে আলাদাভাবে আপডেট করা যায় কারণ GKI মডিউল সুপার ইমেজের মধ্যে আলাদা ডায়নামিক পার্টিশনে থাকে যাকে system_dlkm বলা হয়। GKI মডিউলগুলি Google-এর দ্বারা kernel build-time কী পেয়ার ব্যবহার করে সাইন করা হয় এবং সেগুলি শুধুমাত্র সেই 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-কে এমন একটি ফোল্ডারে পয়েন্ট করুন যেখানে প্রয়োজনীয় GKI মডিউল কার্নেল অবজেক্ট ফাইল রয়েছে, যাতে ডিভাইসের জন্য বিল্ড সিস্টেমে ইনপুট হিসেবে system_dlkm পার্টিশন তৈরি করা যায়। যেমন:

একটি ফোল্ডারে 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 মডিউল অটোমেটিক লোড হয়ে যায়।

যেমন, system_dlkm পার্টিশনে GKI arm64 কার্নেলের জন্য সব GKI মডিউল ইনস্টল করতে 5.15 প্রি-বিল্ট থেকে:

 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;

system-dlkm পার্টিশন যাচাই করা

system_dlkm পার্টিশন যাচাই করার জন্য Google একটি GKI VTS টেস্ট কেস প্রদান করে। ম্যানুয়ালি টেস্ট শুরু করতে, নিম্নলিখিত atest কমান্ড ব্যবহার করুন:

  atest -c vts_dlkm_partition_test