ভেন্ডর মডিউলগুলোর জন্য একটি স্থিতিশীল কার্নেল মডিউল ইন্টারফেস (KMI) বজায় রাখা অত্যন্ত গুরুত্বপূর্ণ। GKI কার্নেলটি বাইনারি আকারে বিল্ড ও সরবরাহ করা হয় এবং ভেন্ডর-লোডেবল মডিউলগুলো একটি পৃথক ট্রি-তে বিল্ড করা হয়। ফলস্বরূপ GKI কার্নেল এবং ভেন্ডর মডিউলগুলোকে এমনভাবে কাজ করতে হবে যেন সেগুলো একসাথে বিল্ড করা হয়েছে।
সাধারণত, লিনাক্স কমিউনিটি মেইনলাইন কার্নেলের জন্য ইন-কার্নেল ABI স্থিতিশীলতার ধারণাকে ভালো চোখে দেখে না । বিভিন্ন টুলচেইন, কনফিগারেশন এবং ক্রমাগত পরিবর্তনশীল লিনাক্স মেইনলাইন কার্নেলের কারণে মেইনলাইনে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব নয়। তবে, নিম্নলিখিত সীমাবদ্ধতাগুলো মেনে অত্যন্ত সীমাবদ্ধ GKI পরিবেশে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব:
কার্নেল বিল্ড করার জন্য শুধুমাত্র একটি কনফিগারেশন,
gki_defconfig, ব্যবহার করা যায়।KMI শুধুমাত্র একটি কার্নেলের একই LTS এবং অ্যান্ড্রয়েড সংস্করণের মধ্যেই স্থিতিশীল থাকে, যেমন
android14-6.1,android15-6.6বাandroid16-6.12।-
android-mainlineএর জন্য কোনো KMI স্থিতিশীলতা বজায় রাখা হয় না।
-
কার্নেল এবং মডিউল বিল্ড করার জন্য শুধুমাত্র AOSP-তে সরবরাহকৃত এবং সংশ্লিষ্ট ব্রাঞ্চের জন্য সংজ্ঞায়িত নির্দিষ্ট Clang টুলচেইনটিই ব্যবহৃত হয়।
একটি প্রতীক তালিকায় নির্দিষ্ট করা মডিউলগুলো দ্বারা ব্যবহৃত বলে পরিচিত প্রতীকগুলোই কেবল স্থিতিশীলতার জন্য পর্যবেক্ষণ করা হয় এবং KMI প্রতীক হিসেবে বিবেচিত হয়।
- এর ফলস্বরূপ, ভেন্ডর মডিউলগুলোকে অবশ্যই শুধুমাত্র KMI সিম্বল ব্যবহার করতে হবে। এই সীমাবদ্ধতাটি কার্যকর করা হয় মডিউল লোড ব্যর্থ করার মাধ্যমে, যদি KMI-বহির্ভূত সিম্বলের প্রয়োজন হয়।
KMI ব্রাঞ্চটি ফ্রিজ করার পর পরিবর্তন করা গেলেও, KMI-টি ভাঙা যায় না। এই পরিবর্তনগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:
- কনফিগারেশন পরিবর্তন
- কার্নেল কোড পরিবর্তন
- টুলচেইন পরিবর্তন (আপডেট সহ)
হারমেটিক বিল্ড প্রসেস এবং LLVM টুলচেইন ব্যবহার করুন
হারমেটিক বিল্ড প্রক্রিয়াটি kernel/manifest এ থাকা repo ম্যানিফেস্টের মাধ্যমে বিল্ড এনভায়রনমেন্টকে সম্পূর্ণরূপে বর্ণনা করে একটি স্থিতিশীল KMI নিশ্চিত করে। উদাহরণস্বরূপ, android16-6.12 এর ম্যানিফেস্টে টুলচেইন, বিল্ড সিস্টেম এবং জেনেরিক কার্নেল ইমেজ (GKI) কার্নেল বিল্ড করার জন্য প্রয়োজনীয় সবকিছু অন্তর্ভুক্ত থাকে। বিল্ড কনফিগারেশন, প্রধানত BUILD.bazel , নিশ্চিত করে যে অন্তর্ভুক্ত টুলগুলো সামঞ্জস্যপূর্ণ বিল্ড ফলাফল তৈরির জন্য সঠিকভাবে ব্যবহৃত হচ্ছে।
একটি হারমেটিক বিল্ড প্রসেস ব্যবহার করা এটাও নিশ্চিত করে যে, ট্রি-এর জন্য ABI ডেসক্রিপশনটি সামঞ্জস্যপূর্ণ থাকে, তা গুগল দ্বারা জেনারেট করা হোক (উদাহরণস্বরূপ, android16-6.12 এর জন্য gki/aarch64/abi.stg ) বা ভেন্ডর মডিউলগুলো অন্তর্ভুক্ত একটি লোকাল ট্রি-তে জেনারেট করা হোক। কার্নেল মডিউল ইন্টারফেস (KMI)-এর জন্য ABI ডেসক্রিপশন তৈরি এবং তুলনা করার টুলগুলোও ম্যানিফেস্টে বর্ণিত রিপোটির অংশ হিসেবে সরবরাহ করা হয়।
GKI কার্নেল বিল্ড করতে ব্যবহৃত টুলচেইনটি অবশ্যই ভেন্ডর মডিউল বিল্ড করতে ব্যবহৃত টুলচেইনের সাথে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ হতে হবে। অ্যান্ড্রয়েড ১০ থেকে, সমস্ত অ্যান্ড্রয়েড কার্নেল অবশ্যই একটি LLVM টুলচেইন দিয়ে বিল্ড করতে হবে। GKI-এর ক্ষেত্রে, প্রোডাক্ট কার্নেল এবং ভেন্ডর মডিউল বিল্ড করতে ব্যবহৃত LLVM টুলচেইনকে অবশ্যই AOSP-এর LLVM টুলচেইনের মতো একই ABI তৈরি করতে হবে এবং পার্টনারদের অবশ্যই নিশ্চিত করতে হবে যে KMI-টি GKI কার্নেলের সাথে সামঞ্জস্যপূর্ণ। প্রদত্ত বিল্ড টুলগুলো ব্যবহার করার জন্য জোরালোভাবে উৎসাহিত করা হয়, কারণ সেগুলো সর্বোত্তম সামঞ্জস্য প্রদান করে।
এরপর কী?
হারমেটিক বিল্ড প্রসেস এবং LLVM টুলচেইন ব্যবহার করে কার্নেল তৈরির নির্দেশাবলীর জন্য, "Build kernels" অংশটি দেখুন।
ABI কীভাবে নিরীক্ষণ করতে হয় এবং সমস্যা সমাধান করতে হয়, সে সম্পর্কিত নির্দেশাবলীর জন্য Android Kernel ABI Monitoring দেখুন।