কার্নেল মডিউল ওভারভিউ

দুই ধরনের কার্নেল মডিউল আছে: হার্ডওয়্যার অ্যাগনোস্টিক GKI মডিউল এবং হার্ডওয়্যার-নির্দিষ্ট ভেন্ডর মডিউল। এই পৃষ্ঠায় দুই ধরনের মডিউলের সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে।

GKI মডিউল

জেনেরিক কার্নেল ইমেজ (GKI) মডিউল ব্যবহার করে ননবুট-প্রয়োজনীয় কার্নেল ক্ষমতা প্রদান করা হয় যা জেনেরিক কোর কার্নেল থেকে আলাদা। GKI মডিউলের সাহায্যে, আপনি ব্যবহার করার জন্য নির্দিষ্ট কার্নেল ক্ষমতা বেছে নিতে পারেন, যা প্রায়শই কার্নেল ইমেজের সাইজ এবং রানটাইম মেমরির ব্যবহার কমিয়ে দেয়। সাইজ ছোট হওয়ার কারণে GKI Android Go ডিভাইস ও অন্যান্য রিসোর্স-বিধিনিষেধযুক্ত ফর্ম ফ্যাক্টরের জন্য উপযুক্ত।

GKI মডিউলগুলি বিক্রেতাদের KMI ফ্রিজ মাইলস্টোনের পরে নতুন আপস্ট্রিম ফিচারগুলি অন্তর্ভুক্ত করার জন্য একটি মেকানিজম প্রদান করে। অন্য কোনও ছবি তৈরি না করে বিল্ট-ইন কোড পরিবর্তন করা যায় না, তবে মডিউল হিসেবে ডেলিভার করা কোড অন্য মডিউল দিয়ে পরিবর্তন করা যায়।

GKI মডিউল কার্নেলের বিল্ড টাইম সাইনিং ইনফ্রাস্ট্রাকচার ব্যবহার করে রান টাইমে GKI এবং অন্যান্য মডিউলের মধ্যে পার্থক্য করে। স্বাক্ষর না করা মডিউল লোড করার অনুমতি দেওয়া হয় যতক্ষণ না সেগুলি শুধুমাত্র অনুমতিপ্রাপ্ত তালিকায় থাকা চিহ্ন ব্যবহার করে অথবা অন্যান্য স্বাক্ষর না করা মডিউল দ্বারা প্রদান করা হয়।

GKI মডিউলের দুটি লজিক্যাল ধরন আছে: সুরক্ষিত GKI মডিউল এবং অসুরক্ষিত GKI মডিউল।

সুরক্ষিত GKI মডিউল

Google একটি সুরক্ষিত GKI মডিউল প্রদান করে, এটি কোনওভাবেই সীমাবদ্ধ নয় এবং লোড করার পরে কার্নেলের সাথে তৈরি করা হয়েছে বলে মনে হয়। এছাড়াও, সুরক্ষিত GKI মডিউলের নিম্নলিখিত বৈশিষ্ট্য আছে:

  • সুরক্ষিত GKI মডিউলের কাছে নন-KMI কার্নেল সিম্বল অ্যাক্সেস করার সুবিধা থাকে যা ভেন্ডর মডিউল বা অসুরক্ষিত GKI মডিউলের কাছে উপলভ্য থাকে না।
  • সুরক্ষিত GKI মডিউল, KMI সারফেসের অংশ হয়ে যাওয়া সিম্বল এক্সপোর্ট করতে পারে যতক্ষণ সেইসব সিম্বল কোনও সিম্বল তালিকায় উল্লেখ করা থাকে।
  • সুরক্ষিত GKI মডিউল ভেন্ডর মডিউল দ্বারা ওভাররাইড করা যাবে না।

সুরক্ষিত GKI মডিউল হল GKI মডিউলের ডিফল্ট ক্লাস। KMI ফ্রিজ করার সময় সব GKI মডিউল সুরক্ষিত বলে বিবেচনা করা হয়।

সুরক্ষিত নয় এমন GKI মডিউল

একটি অসুরক্ষিত GKI মডিউল একটি ভেন্ডর মডিউল দ্বারা ওভাররাইড করা যেতে পারে। KMI ফ্রিজ করার পরে, GKI টিম যদি সিদ্ধান্ত নেয় যে ভেন্ডরদের আপস্ট্রিম Linux থেকে নতুন ফিচার সহ ভার্সন দিয়ে ডিফল্ট প্রয়োগ ওভাররাইড করতে হবে, তাহলে সুরক্ষিত GKI মডিউলকে অসুরক্ষিত হিসেবে আবার শ্রেণীবদ্ধ করা হতে পারে। পরবর্তী GKI রিলিজের সময়, আনপ্রোটেক্টেড মডিউলগুলিকে আবার প্রোটেক্টেড হিসেবে শ্রেণীবদ্ধ করা হয়, যখন আপস্ট্রিম কোড Android Common Kernel (ACK)-এ ল্যান্ড করে। সুরক্ষিত নয় এমন GKI মডিউলে নিম্নলিখিত বৈশিষ্ট্য থাকে:

  • সুরক্ষিত নয় এমন GKI মডিউল, এক্সপোর্ট করা চিহ্ন অ্যাক্সেস করতে পারে, যেমন ভেন্ডর মডিউল।
  • সুরক্ষিত নয় এমন GKI মডিউল, সুরক্ষিত GKI মডিউল দ্বারা এক্সপোর্ট করা সিম্বল এক্সপোর্ট করতে পারে না।
  • সুরক্ষিত নয় এমন GKI মডিউলকে অবশ্যই যেকোনও KMI ইন্টারফেসকে এমনভাবে সংরক্ষণ করতে হবে যেন সেটি কোর কার্নেলের অংশ।
  • ভেন্ডর মডিউল, সুরক্ষিত নয় এমন GKI মডিউলকে ওভাররাইড করতে পারে।

ভেন্ডর মডিউল

SoC ও ডিভাইস-নির্দিষ্ট ক্ষমতা প্রয়োগ করার জন্য পার্টনাররা ভেন্ডর মডিউল ডেলিভার করে। GKI কার্নেলের অংশ হিসেবে ডেলিভার করা হয়নি এমন যেকোনও বিদ্যমান কার্নেল মডিউলকে ভেন্ডর মডিউল হিসেবে ডেলিভার করা যেতে পারে।

GKI প্রোজেক্টের অন্যতম প্রধান লক্ষ্য হল কোর কার্নেলে হার্ডওয়্যার-নির্দিষ্ট কোড কমানো। তাই, ভেন্ডররা আশা করতে পারেন যে GKI কার্নেলে এমন কোনও মডিউল থাকবে না যা স্পষ্টভাবে তাদের নিজস্ব হার্ডওয়্যার ম্যানেজ করছে। যেমন, ABC Inc. আশা করতে পারে যে CONFIG_ABC_SOC_SUPPORT-এর মতো কনফিগারেশন তাদের সহায়তা ছাড়া বিল্ট-ইন বা লোড করা যায় এমন GKI মডিউল হিসেবে চালু করা হবে না।

ACK-তে কোনও কার্নেল ড্রাইভার বা ফ্রেমওয়ার্ক থাকলে, কিন্তু GKI কার্নেলের অংশ হিসেবে সেটি ডেলিভার করা না হলে, ভেন্ডর ড্রাইভারটি পরিবর্তন করে ভেন্ডর মডিউল হিসেবে ডেলিভার করতে পারে। যেসব মডিউল কোনও নির্দিষ্ট ভেন্ডর-নির্ভর নয়, সেগুলির ক্ষেত্রে এই ধরনের পরিবর্তন না করাই ভাল কারণ ভবিষ্যতে রিলিজ করা GKI কার্নেলে একই ধরনের সুবিধা থাকতে পারে। GKI কার্নেলে ভেন্ডর মডিউলের প্রদান করা ক্ষমতা থাকলে, ভেন্ডর মডিউল লোড হবে না। যেমন, CONFIG_GREYBUS Android 11-এ GKI-এর জন্য সেট করা নেই, তাই ভেন্ডররা greybus ভেন্ডর মডিউল ডেলিভার করতে পারেন। তবে, CONFIG_GREYBUS Android 12-এ GKI বিল্ট-ইন বা মডিউল হিসেবে চালু করা হতে পারে, যেক্ষেত্রে গ্রেবাস ভেন্ডর মডিউল লোড করা হবে না। পেশাদার পদ্ধতি হল, ভেন্ডর মডিউল হিসেবে ডেলিভার করা হলে ভেন্ডর-নির্দিষ্ট নয় এমন ড্রাইভারের আপস্ট্রিম ভার্সন ব্যবহার করা।

আপনি vendor-এ বা vendor_boot ছবিতে ভেন্ডর মডিউল ডেলিভার করতে পারেন। বুট প্রসেসের প্রথম দিকে প্রয়োজনীয় মডিউল অবশ্যই vendor_boot-এ থাকতে হবে। vendor_boot থেকে মডিউল লোড করার সাথে বুট-টাইম খরচ যুক্ত থাকে।