কার্নেল বৈশিষ্ট্যগুলিকে GKI মডিউল হিসাবে কনফিগার করুন

এই পৃষ্ঠায় আলোচনা করা হয়েছে কীভাবে একটি নতুন কার্নেল ফিচারকে GKI মডিউল হিসেবে কনফিগার করতে হয়, অথবা কীভাবে একটি বিদ্যমান বিল্ট-ইন কার্নেল ফিচারকে GKI মডিউল হিসেবে কনফিগার করতে হয়।

একটি নতুন ফিচারকে GKI মডিউল হিসেবে কনফিগার করুন

  1. নতুন ফিচারটির জন্য, gki_defconfig ফাইলটি এডিট করুন এবং প্রয়োজনীয় কার্নেল ফিচারের কনফিগ আইটেমটি n থেকে m ( =m ) এ সেট করুন। এই সেটিংটি arch/arm64/configs/gki_defconfig এবং arch/x86/configs/gki_defconfig উভয় ফাইলেই সেট করুন।

  2. ফিচারটির জন্য তৈরি হওয়া KO ( .ko ) ফাইলগুলো নিম্নলিখিত ফাইলের _COMMON_GKI_MODULES_LIST সেকশনে যোগ করুন। ফাইলগুলো সাজানো ক্রমানুসারে যোগ করুন। যদি আপনি তৈরি হওয়া সমস্ত ফাইল সম্পর্কে নিশ্চিত না হন, তাহলে বিল্ডটি ব্যর্থ হবে এবং তালিকায় যোগ করার জন্য প্রয়োজনীয় সমস্ত KO ফাইলের একটি তালিকা দেখাবে।

    • android17-6.18 এবং তার পরবর্তী সংস্করণগুলোতে, common/bazel/modules_private.bzl ফাইলে আইটেমগুলো যোগ করুন।
    • android16-6.12 এবং এর নিচের সংস্করণগুলোতে, common/modules.bzl ফাইলে আইটেমগুলো যোগ করুন।
  3. অ্যান্ড্রয়েড ১৪-এর জন্য, মডিউলটিকে একটি সুরক্ষিত GKI মডিউল হিসেবে চিহ্নিত করতে, রানটাইমে বাইনারি সার্চের জন্য ধাপ ২ থেকে প্রাপ্ত KO ফাইলগুলোর আরোহী ক্রমে সাজিয়ে common/android/gki_{ARCH}_protected_modules এ যোগ করুন।

  4. Android 14 এবং 15-এর জন্য, এক্সপোর্টের তালিকাটি এমনভাবে আপডেট করুন যাতে এটি common/android/abi_gki_protected_exports_ ARCHITECTURE এ নতুন যোগ করা এক্সপোর্টগুলিকে অন্তর্ভুক্ত করে। উদাহরণস্বরূপ, তালিকাটি আপডেট করতে, aarch64 এর জন্য tools/bazel run //common:kernel_aarch64_abi_update_protected_exports

  5. নিশ্চিত করুন যে ধাপ ২ থেকে নতুন যোগ করা KO ফাইলগুলি কার্নেলের out/<androidX-YZ>/dist/system_dlkm.img এবং out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz এ কপি করা হয়েছে। system_dlkm_staging_archive.tar.gz আর্কাইভের মডিউলগুলি প্ল্যাটফর্ম বিল্ডে system_dlkm.img তৈরি করার জন্য ইনপুট হিসাবে ব্যবহার করা যেতে পারে।

  6. পর্যালোচনার জন্য আপনার পরিবর্তনগুলি জমা দিন। GKI মডিউলগুলি শুধুমাত্র অ্যান্ড্রয়েডের জন্য একটি কার্নেল বৈশিষ্ট্য, তাই মডিউল রূপান্তর প্যাচগুলি আপস্ট্রিমে জমা দেওয়ার প্রয়োজন নেই। তবে, অ্যান্ড্রয়েড কমন কার্নেল (ACK) প্যাচ জমা দেওয়ার জন্য আপনাকে অবশ্যই অন্যান্য নির্দেশিকা অনুসরণ করতে হবে।

কার্নেলের একটি বিল্ট-ইন ফিচারকে GKI মডিউল হিসেবে কনফিগার করুন

  1. বিদ্যমান কোনো বিল্ট-ইন কার্নেল ফিচারের জন্য, gki_defconfig ফাইলটি সম্পাদনা করুন এবং প্রয়োজনীয় কার্নেল ফিচারের কনফিগারেশন আইটেমটি y থেকে m ( =m ) এ সেট করুন। এই সেটিংটি arch/arm64/configs/gki_defconfig এবং arch/x86/configs/gki_defconfig উভয় ফাইলেই সেট করুন।

  2. ফিচারটির জন্য তৈরি হওয়া KO ( .ko ) ফাইলগুলো নিম্নলিখিত ফাইলের _COMMON_GKI_MODULES_LIST সেকশনে যোগ করুন। ফাইলগুলো সাজানো ক্রমানুসারে যোগ করুন। যদি আপনি তৈরি হওয়া সমস্ত ফাইল সম্পর্কে নিশ্চিত না হন, তাহলে বিল্ডটি ব্যর্থ হবে এবং তালিকায় যোগ করার জন্য প্রয়োজনীয় সমস্ত KO ফাইলের একটি তালিকা দেখাবে।

    • android17-6.18 এবং তার পরবর্তী সংস্করণগুলোতে, common/bazel/modules_private.bzl ফাইলে আইটেমগুলো যোগ করুন।
    • android16-6.12 এবং এর নিচের সংস্করণগুলোতে, `common/modules.bzl`-এ আইটেমগুলো যোগ করুন।
  3. অ্যান্ড্রয়েড ১৪-এর জন্য, মডিউলটিকে একটি সুরক্ষিত GKI মডিউল হিসেবে চিহ্নিত করতে, রানটাইমে বাইনারি সার্চের জন্য ধাপ ২ থেকে প্রাপ্ত KO ফাইলগুলোর আরোহী ক্রমে সাজিয়ে common/android/gki_{ARCH}_protected_modules এ যোগ করুন।

  4. Android 14 এবং 15-এর জন্য, aarch64 এর ক্ষেত্রে tools/bazel run //common:kernel_aarch64_abi_update_protected_exports ব্যবহার করে common/android/abi_gki_protected_exports_{ARCH} -এ থাকা নতুন যুক্ত হওয়া মডিউলের এক্সপোর্টগুলো অন্তর্ভুক্ত করে সুরক্ষিত এক্সপোর্টের তালিকাটি আপডেট করুন।

  5. নিশ্চিত করুন যে ধাপ ২ থেকে নতুন রূপান্তরিত মডিউল KO ফাইলগুলি কার্নেলের out/<androidX-YZ>/dist/system_dlkm.img এবং out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz এ কপি করা হয়েছে। system_dlkm_staging_archive.tar.gz আর্কাইভের মডিউলগুলি প্ল্যাটফর্ম বিল্ডে system_dlkm.img তৈরি করার জন্য ইনপুট হিসাবে ব্যবহার করা যেতে পারে।

  6. পর্যালোচনার জন্য আপনার পরিবর্তনগুলি জমা দিন। GKI মডিউলগুলি শুধুমাত্র অ্যান্ড্রয়েডের জন্য একটি কার্নেল বৈশিষ্ট্য, তাই মডিউল রূপান্তর প্যাচগুলি আপস্ট্রিমে জমা দেওয়ার প্রয়োজন নেই। তবে, অ্যান্ড্রয়েড কমন কার্নেল (ACK) প্যাচ জমা দেওয়ার জন্য আপনাকে অবশ্যই অন্যান্য নির্দেশিকা অনুসরণ করতে হবে।

একটি সুরক্ষিত GKI মডিউলকে অসুরক্ষিত মডিউলে রূপান্তর করুন

  1. অ্যান্ড্রয়েড ১৫ এবং তার পরবর্তী সংস্করণগুলোর জন্য, যে মডিউলটিকে protected থেকে unprotected-এ রূপান্তর করা হচ্ছে, সেটিকে নিম্নলিখিত ফাইলের _COMMON_UNPROTECTED_MODULES_LIST তালিকায় যুক্ত করুন:

    • android17-6.18 এবং তার পরবর্তী সংস্করণগুলোতে, common/bazel/modules_private.bzl ফাইলে আইটেমগুলো যোগ করুন।
    • android16-6.12 এবং এর নিচের সংস্করণগুলোতে, common/modules.bzl ফাইলে আইটেমগুলো যোগ করুন।
  2. অ্যান্ড্রয়েড ১৪-এর জন্য, common/android/gki_protected_modules এ থাকা সুরক্ষিত মডিউলের তালিকা থেকে, যে মডিউলটিকে সুরক্ষিত থেকে অসুরক্ষিত-এ রূপান্তর করা হচ্ছে, সেটিকে সরিয়ে দিন।

  3. Android 14 এবং 15-এর জন্য, aarch64 এর ক্ষেত্রে tools/bazel run //common:kernel_aarch64_abi_update_protected_exports ব্যবহার করে common/android/abi_gki_protected_exports_{ARCH} ফোল্ডারে থাকা নতুন রূপান্তরিত অসুরক্ষিত মডিউলের এক্সপোর্টগুলো বাদ দিয়ে সুরক্ষিত এক্সপোর্টের তালিকাটি আপডেট করুন।

  4. পর্যালোচনার জন্য আপনার পরিবর্তনগুলি জমা দিন। GKI মডিউলগুলি শুধুমাত্র অ্যান্ড্রয়েডের জন্য একটি কার্নেল বৈশিষ্ট্য, তাই মডিউল রূপান্তর প্যাচগুলি আপস্ট্রিমে জমা দেওয়ার প্রয়োজন নেই। তবে, অ্যান্ড্রয়েড কমন কার্নেল (ACK) প্যাচ জমা দেওয়ার জন্য আপনাকে অবশ্যই অন্যান্য নির্দেশিকা অনুসরণ করতে হবে।

জিকেআই মডিউল প্রতীক লঙ্ঘন সমাধানের দ্রুত নির্দেশিকা

যখন স্বাক্ষরবিহীন মডিউলগুলো GKI মডিউলের জন্য বিদ্যমান প্রতীক সুরক্ষা লঙ্ঘন করে, তখন মডিউল লোড করার সময় দুই ধরনের ত্রুটি দেখা দিতে পারে, যার ফলে সেটি ব্যর্থ হয়।

১. সুরক্ষিত প্রতীক ব্যবহার করে স্বাক্ষরবিহীন মডিউল

ত্রুটি:

module: Protected symbol: some_kernel_function (err -13)

কারণ:

module.ko ফাইলটি একটি স্বাক্ষরবিহীন ভেন্ডর মডিউল এবং এটি ভেন্ডর সিম্বল তালিকায় তালিকাভুক্ত না থাকা সত্ত্বেও লোড হওয়ার সময় GKI মডিউলের এক্সপোর্ট করা সিম্বল some_kernel_function রিজলভ করার চেষ্টা করে।

সমাধান:

যদি module.ko একটি সুরক্ষিত GKI মডিউল না হয়, তাহলে ভেন্ডর সিম্বল লিস্টে some_kernel_function অন্তর্ভুক্ত করার মাধ্যমে সিম্বল লিস্ট আপডেট করলে ত্রুটিটির সমাধান হয়। বিকল্পভাবে, module.ko এর GKI সংস্করণটি ব্যবহার করুন।

২. সুরক্ষিত প্রতীক রপ্তানিকারী স্বাক্ষরবিহীন মডিউল

ত্রুটি:

module: exports protected symbol some_kernel_function

কারণ:

যে মডিউলটি some_kernel_function এক্সপোর্ট করে, সেটি একটি সুরক্ষিত GKI মডিউল, এবং module.ko সম্ভবত সেই মডিউলটির একটি স্বাক্ষরবিহীন কাস্টম সংস্করণ। যখন module.ko some_kernel_function এক্সপোর্ট করার চেষ্টা করে, যা শুধুমাত্র একটি স্বাক্ষরিত GKI মডিউল দ্বারা এক্সপোর্ট করা যায়, তখন এই বার্তা সহ লোডিং ব্যর্থ হয়।

সমাধান:

যদি আনসাইনড মডিউলটি একটি কাস্টম সংস্করণ হয়, তবে some_kernel_function এক্সপোর্ট করে এমন মডিউলটির GKI সংস্করণ ব্যবহার করে এটি সংশোধন করা যেতে পারে।