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. Android 14-এর জন্য, রানটাইমে বাইনারি সার্চের জন্য ঊর্ধ্বক্রমে সাজানো, ধাপ ২ থেকে KO ফাইলের একই সেট যোগ করুন, common/android/gki_{ARCH}_protected_modules-এ মডিউলটিকে একটি সুরক্ষিত GKI মডিউল হিসেবে মনোনীত করতে।

  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-Y.Z>/dist/system_dlkm.img এবং out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz-এ কপি করা হয়েছে কিনা তা ভালোভাবে দেখে নিন। system_dlkm_staging_archive.tar.gz আর্কাইভে থাকা মডিউলগুলি প্ল্যাটফর্ম বিল্ডে system_dlkm.img তৈরি করার জন্য ইনপুট হিসাবে ব্যবহার করা যেতে পারে।

  6. পর্যালোচনার জন্য আপনার পরিবর্তন জমা দিন। GKI মডিউল হল শুধুমাত্র Android-এর জন্য প্রযোজ্য কার্নেল ফিচার, তাই মডিউল কনভার্সন প্যাচ আপস্ট্রিম করার প্রয়োজন নেই। তবে, আপনাকে Android Common Kernel (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. Android 14-এর জন্য, রানটাইমে বাইনারি সার্চের জন্য ঊর্ধ্বক্রমে সাজানো, ধাপ ২ থেকে KO ফাইলের একই সেট যোগ করুন, common/android/gki_{ARCH}_protected_modules-এ মডিউলটিকে একটি সুরক্ষিত GKI মডিউল হিসেবে মনোনীত করতে।

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

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

  6. পর্যালোচনার জন্য আপনার করা পরিবর্তন জমা দিন। GKI মডিউল হল শুধুমাত্র Android-এর জন্য প্রযোজ্য কার্নেল ফিচার, তাই মডিউল কনভার্সন প্যাচ আপস্ট্রিম করার প্রয়োজন নেই। তবে, আপনাকে অবশ্যই অন্যান্য নির্দেশিকা মেনে Android Common Kernel (ACK) প্যাচ জমা দিতে হবে।

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

  1. Android 15 ও তার পরবর্তী ভার্সনের জন্য, সুরক্ষিত থেকে অসুরক্ষিততে কনভার্ট করা হচ্ছে এমন মডিউল নিম্নলিখিত ফাইলের _COMMON_UNPROTECTED_MODULES_LIST তালিকায় যোগ করুন:

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

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

  4. পর্যালোচনার জন্য আপনার করা পরিবর্তন জমা দিন। GKI মডিউল হল শুধুমাত্র Android-এর জন্য প্রযোজ্য কার্নেল ফিচার, তাই মডিউল কনভার্সন প্যাচ আপস্ট্রিম করার প্রয়োজন নেই। তবে, Android Common Kernel (ACK) প্যাচ জমা দেওয়ার জন্য আপনাকে অন্যান্য নির্দেশিকা মেনে চলতে হবে।

GKI মডিউল সিম্বল লঙ্ঘন সংক্রান্ত সমস্যার সমাধান করার দ্রুত নির্দেশিকা

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 ভার্সন ব্যবহার করে এটি ঠিক করা যেতে পারে।