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