এই পৃষ্ঠায় আলোচনা করা হয়েছে কীভাবে একটি নতুন কার্নেল ফিচারকে GKI মডিউল হিসেবে কনফিগার করতে হয়, অথবা কীভাবে একটি বিদ্যমান বিল্ট-ইন কার্নেল ফিচারকে GKI মডিউল হিসেবে কনফিগার করতে হয়।
একটি নতুন ফিচারকে GKI মডিউল হিসেবে কনফিগার করুন
নতুন ফিচারটির জন্য,
gki_defconfigফাইলটি এডিট করুন এবং প্রয়োজনীয় কার্নেল ফিচারের কনফিগ আইটেমটিnথেকেm(=m) এ সেট করুন। এই সেটিংটিarch/arm64/configs/gki_defconfigএবংarch/x86/configs/gki_defconfigউভয় ফাইলেই সেট করুন।ফিচারটির জন্য তৈরি হওয়া KO (
.ko) ফাইলগুলো নিম্নলিখিত ফাইলের_COMMON_GKI_MODULES_LISTসেকশনে যোগ করুন। ফাইলগুলো সাজানো ক্রমানুসারে যোগ করুন। যদি আপনি তৈরি হওয়া সমস্ত ফাইল সম্পর্কে নিশ্চিত না হন, তাহলে বিল্ডটি ব্যর্থ হবে এবং তালিকায় যোগ করার জন্য প্রয়োজনীয় সমস্ত KO ফাইলের একটি তালিকা দেখাবে।-
android17-6.18এবং তার পরবর্তী সংস্করণগুলোতে,common/bazel/modules_private.bzlফাইলে আইটেমগুলো যোগ করুন। -
android16-6.12এবং এর নিচের সংস্করণগুলোতে,common/modules.bzlফাইলে আইটেমগুলো যোগ করুন।
-
অ্যান্ড্রয়েড ১৪-এর জন্য, মডিউলটিকে একটি সুরক্ষিত GKI মডিউল হিসেবে চিহ্নিত করতে, রানটাইমে বাইনারি সার্চের জন্য ধাপ ২ থেকে প্রাপ্ত KO ফাইলগুলোর আরোহী ক্রমে সাজিয়ে
common/android/gki_{ARCH}_protected_modulesএ যোগ করুন।Android 14 এবং 15-এর জন্য, এক্সপোর্টের তালিকাটি এমনভাবে আপডেট করুন যাতে এটি
common/android/abi_gki_protected_exports_ ARCHITECTUREএ নতুন যোগ করা এক্সপোর্টগুলিকে অন্তর্ভুক্ত করে। উদাহরণস্বরূপ, তালিকাটি আপডেট করতে,aarch64এর জন্যtools/bazel run //common:kernel_aarch64_abi_update_protected_exports।নিশ্চিত করুন যে ধাপ ২ থেকে নতুন যোগ করা 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তৈরি করার জন্য ইনপুট হিসাবে ব্যবহার করা যেতে পারে।পর্যালোচনার জন্য আপনার পরিবর্তনগুলি জমা দিন। GKI মডিউলগুলি শুধুমাত্র অ্যান্ড্রয়েডের জন্য একটি কার্নেল বৈশিষ্ট্য, তাই মডিউল রূপান্তর প্যাচগুলি আপস্ট্রিমে জমা দেওয়ার প্রয়োজন নেই। তবে, অ্যান্ড্রয়েড কমন কার্নেল (ACK) প্যাচ জমা দেওয়ার জন্য আপনাকে অবশ্যই অন্যান্য নির্দেশিকা অনুসরণ করতে হবে।
কার্নেলের একটি বিল্ট-ইন ফিচারকে GKI মডিউল হিসেবে কনফিগার করুন
বিদ্যমান কোনো বিল্ট-ইন কার্নেল ফিচারের জন্য,
gki_defconfigফাইলটি সম্পাদনা করুন এবং প্রয়োজনীয় কার্নেল ফিচারের কনফিগারেশন আইটেমটিyথেকেm(=m) এ সেট করুন। এই সেটিংটিarch/arm64/configs/gki_defconfigএবংarch/x86/configs/gki_defconfigউভয় ফাইলেই সেট করুন।ফিচারটির জন্য তৈরি হওয়া KO (
.ko) ফাইলগুলো নিম্নলিখিত ফাইলের_COMMON_GKI_MODULES_LISTসেকশনে যোগ করুন। ফাইলগুলো সাজানো ক্রমানুসারে যোগ করুন। যদি আপনি তৈরি হওয়া সমস্ত ফাইল সম্পর্কে নিশ্চিত না হন, তাহলে বিল্ডটি ব্যর্থ হবে এবং তালিকায় যোগ করার জন্য প্রয়োজনীয় সমস্ত KO ফাইলের একটি তালিকা দেখাবে।-
android17-6.18এবং তার পরবর্তী সংস্করণগুলোতে,common/bazel/modules_private.bzlফাইলে আইটেমগুলো যোগ করুন। -
android16-6.12এবং এর নিচের সংস্করণগুলোতে, `common/modules.bzl`-এ আইটেমগুলো যোগ করুন।
-
অ্যান্ড্রয়েড ১৪-এর জন্য, মডিউলটিকে একটি সুরক্ষিত GKI মডিউল হিসেবে চিহ্নিত করতে, রানটাইমে বাইনারি সার্চের জন্য ধাপ ২ থেকে প্রাপ্ত KO ফাইলগুলোর আরোহী ক্রমে সাজিয়ে
common/android/gki_{ARCH}_protected_modulesএ যোগ করুন।Android 14 এবং 15-এর জন্য,
aarch64এর ক্ষেত্রেtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsব্যবহার করেcommon/android/abi_gki_protected_exports_{ARCH}-এ থাকা নতুন যুক্ত হওয়া মডিউলের এক্সপোর্টগুলো অন্তর্ভুক্ত করে সুরক্ষিত এক্সপোর্টের তালিকাটি আপডেট করুন।নিশ্চিত করুন যে ধাপ ২ থেকে নতুন রূপান্তরিত মডিউল 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তৈরি করার জন্য ইনপুট হিসাবে ব্যবহার করা যেতে পারে।পর্যালোচনার জন্য আপনার পরিবর্তনগুলি জমা দিন। GKI মডিউলগুলি শুধুমাত্র অ্যান্ড্রয়েডের জন্য একটি কার্নেল বৈশিষ্ট্য, তাই মডিউল রূপান্তর প্যাচগুলি আপস্ট্রিমে জমা দেওয়ার প্রয়োজন নেই। তবে, অ্যান্ড্রয়েড কমন কার্নেল (ACK) প্যাচ জমা দেওয়ার জন্য আপনাকে অবশ্যই অন্যান্য নির্দেশিকা অনুসরণ করতে হবে।
একটি সুরক্ষিত GKI মডিউলকে অসুরক্ষিত মডিউলে রূপান্তর করুন
অ্যান্ড্রয়েড ১৫ এবং তার পরবর্তী সংস্করণগুলোর জন্য, যে মডিউলটিকে protected থেকে unprotected-এ রূপান্তর করা হচ্ছে, সেটিকে নিম্নলিখিত ফাইলের
_COMMON_UNPROTECTED_MODULES_LISTতালিকায় যুক্ত করুন:-
android17-6.18এবং তার পরবর্তী সংস্করণগুলোতে,common/bazel/modules_private.bzlফাইলে আইটেমগুলো যোগ করুন। -
android16-6.12এবং এর নিচের সংস্করণগুলোতে,common/modules.bzlফাইলে আইটেমগুলো যোগ করুন।
-
অ্যান্ড্রয়েড ১৪-এর জন্য,
common/android/gki_protected_modulesএ থাকা সুরক্ষিত মডিউলের তালিকা থেকে, যে মডিউলটিকে সুরক্ষিত থেকে অসুরক্ষিত-এ রূপান্তর করা হচ্ছে, সেটিকে সরিয়ে দিন।Android 14 এবং 15-এর জন্য,
aarch64এর ক্ষেত্রেtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsব্যবহার করেcommon/android/abi_gki_protected_exports_{ARCH}ফোল্ডারে থাকা নতুন রূপান্তরিত অসুরক্ষিত মডিউলের এক্সপোর্টগুলো বাদ দিয়ে সুরক্ষিত এক্সপোর্টের তালিকাটি আপডেট করুন।পর্যালোচনার জন্য আপনার পরিবর্তনগুলি জমা দিন। 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 সংস্করণ ব্যবহার করে এটি সংশোধন করা যেতে পারে।