কার্নেল মডিউল দুই প্রকারের হয়: হার্ডওয়্যার-নিরপেক্ষ GKI মডিউল এবং হার্ডওয়্যার-নির্দিষ্ট ভেন্ডর মডিউল । এই পৃষ্ঠায় উভয় প্রকার মডিউলের একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে।
জিকেআই মডিউল
জেনেরিক কার্নেল ইমেজ (GKI) মডিউলগুলো জেনেরিক কোর কার্নেল থেকে আলাদাভাবে, বুট-এর জন্য অপ্রয়োজনীয় কার্নেল সক্ষমতাগুলো সরবরাহ করতে ব্যবহৃত হয়। GKI মডিউলের সাহায্যে, আপনি ব্যবহারের জন্য নির্দিষ্ট কার্নেল সক্ষমতা বেছে নিতে পারেন, যা প্রায়শই কার্নেল ইমেজের আকার এবং রানটাইম মেমরি ব্যবহার কমিয়ে দেয়। আকারের এই হ্রাসের কারণে GKI অ্যান্ড্রয়েড গো ডিভাইস এবং অন্যান্য সীমিত রিসোর্সযুক্ত ফর্ম ফ্যাক্টরগুলোর জন্য বিশেষভাবে উপযোগী।
জিকেআই মডিউলগুলো ভেন্ডরদের কেএমআই ফ্রিজ মাইলস্টোনের পরেও নতুন আপস্ট্রিম ফিচার অন্তর্ভুক্ত করার একটি পদ্ধতি প্রদান করে। বিল্ট-ইন কোড অন্য একটি ইমেজ তৈরি না করে প্রতিস্থাপন করা যায় না, অপরদিকে মডিউল হিসেবে সরবরাহ করা কোড অন্য একটি মডিউল দ্বারা প্রতিস্থাপন করা যায়।
GKI মডিউলগুলো রান টাইমে অন্যান্য মডিউল থেকে নিজেদের আলাদা করার জন্য কার্নেলের বিল্ড টাইম সাইনিং পরিকাঠামো ব্যবহার করে। স্বাক্ষরবিহীন মডিউলগুলোকে লোড করার অনুমতি দেওয়া হয়, যতক্ষণ পর্যন্ত তারা শুধুমাত্র অনুমোদিত তালিকায় থাকা বা অন্য স্বাক্ষরবিহীন মডিউল দ্বারা সরবরাহকৃত সিম্বল ব্যবহার করে।
জিকেআই মডিউলের দুটি যৌক্তিক প্রকারভেদ রয়েছে: সুরক্ষিত জিকেআই মডিউল এবং অসুরক্ষিত জিকেআই মডিউল ।
সুরক্ষিত GKI মডিউল
একটি সুরক্ষিত GKI মডিউল গুগল দ্বারা সরবরাহ করা হয়, এটি কোনোভাবেই সীমাবদ্ধ নয় এবং লোড হওয়ার পর এমনভাবে আচরণ করে যেন এটি কার্নেলের সাথেই বিল্ড করা হয়েছে। এছাড়াও, সুরক্ষিত GKI মডিউলগুলোর নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- সুরক্ষিত GKI মডিউলগুলো এমন সব নন-KMI কার্নেল সিম্বল অ্যাক্সেস করতে পারে, যা ভেন্ডর মডিউল বা অসুরক্ষিত GKI মডিউলগুলোর জন্য উপলব্ধ নয়।
- সুরক্ষিত GKI মডিউলগুলো এমন প্রতীক রপ্তানি করতে পারে যা KMI সারফেসের অংশ হয়ে যায়, যতক্ষণ পর্যন্ত সেই প্রতীকগুলো একটি প্রতীক তালিকায় উদ্ধৃত থাকে।
- সুরক্ষিত GKI মডিউলগুলোকে ভেন্ডর মডিউল দ্বারা ওভাররাইড করা যায় না।
একটি সুরক্ষিত GKI মডিউল হলো GKI মডিউলগুলোর ডিফল্ট শ্রেণি। KMI ফ্রিজ করার সময় সমস্ত GKI মডিউলকে সুরক্ষিত বলে গণ্য করা হয়।
অসুরক্ষিত GKI মডিউল
একটি অসুরক্ষিত GKI মডিউলকে একটি ভেন্ডর মডিউল দ্বারা ওভাররাইড করা যেতে পারে। KMI ফ্রিজের পরে, একটি সুরক্ষিত GKI মডিউলকে অসুরক্ষিত হিসাবে পুনঃশ্রেণীবদ্ধ করা হতে পারে, যদি GKI টিম সিদ্ধান্ত নেয় যে ভেন্ডরদের ডিফল্ট ইমপ্লিমেন্টেশনকে এমন একটি সংস্করণ দিয়ে ওভাররাইড করতে হবে যাতে আপস্ট্রিম লিনাক্সের নতুন বৈশিষ্ট্য অন্তর্ভুক্ত থাকে। পরবর্তী GKI রিলিজে, আপস্ট্রিম কোড একটি অ্যান্ড্রয়েড কমন কার্নেলে (ACK) অন্তর্ভুক্ত হওয়ার পর অসুরক্ষিত মডিউলগুলোকে সুরক্ষিত হিসাবে পুনঃশ্রেণীবদ্ধ করা হয়। অসুরক্ষিত GKI মডিউলগুলোর নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- অসুরক্ষিত GKI মডিউলগুলো ভেন্ডর মডিউলগুলোর মতোই এক্সপোর্ট করা সিম্বলগুলোতে অ্যাক্সেস পায়।
- অসুরক্ষিত GKI মডিউলগুলো, সুরক্ষিত GKI মডিউল দ্বারা এক্সপোর্ট করা সিম্বলগুলো এক্সপোর্ট করতে পারে না।
- অসুরক্ষিত GKI মডিউলগুলিকে অবশ্যই যেকোনো KMI ইন্টারফেসকে মূল কার্নেলের অংশ হিসেবে সংরক্ষণ করতে হবে।
- অসুরক্ষিত GKI মডিউলগুলোকে ভেন্ডর মডিউল দ্বারা ওভাররাইড করা যেতে পারে।
বিক্রেতা মডিউল
SoC এবং ডিভাইস-নির্দিষ্ট সক্ষমতা বাস্তবায়নের জন্য পার্টনারদের দ্বারা একটি ভেন্ডর মডিউল সরবরাহ করা হয়। GKI কার্নেলের অংশ হিসেবে সরবরাহ করা হয় না এমন যেকোনো বিদ্যমান কার্নেল মডিউলকে ভেন্ডর মডিউল হিসেবে সরবরাহ করা যেতে পারে।
যেহেতু GKI প্রকল্পের অন্যতম প্রধান লক্ষ্য হলো কোর কার্নেলে হার্ডওয়্যার-নির্দিষ্ট কোড কমানো, তাই ভেন্ডররা আশা করতে পারেন যে GKI কার্নেলে এমন কোনো মডিউল অন্তর্ভুক্ত থাকবে না যা স্পষ্টভাবে তাদের নিজস্ব হার্ডওয়্যার পরিচালনা করে। উদাহরণস্বরূপ, ভেন্ডর ABC Inc. আশা করতে পারে যে তাদের সমর্থন ছাড়া CONFIG_ABC_SOC_SUPPORT এর মতো কনফিগারেশনগুলো বিল্ট-ইন বা লোডেবল GKI মডিউল হিসেবে সক্রিয় হবে না।
যদি কোনো কার্নেল ড্রাইভার বা ফ্রেমওয়ার্ক ACK-তে বিদ্যমান থাকে, কিন্তু GKI কার্নেলের অংশ হিসেবে সরবরাহ করা না হয়, তবে ভেন্ডররা ড্রাইভারটি পরিবর্তন করে একটি ভেন্ডর মডিউল হিসেবে সরবরাহ করতে পারে। ভেন্ডর-নির্দিষ্ট নয় এমন মডিউলগুলোর জন্য এই ধরনের পরিবর্তন নিরুৎসাহিত করা হয়, কারণ একই সক্ষমতাগুলো ভবিষ্যতের কোনো রিলিজে GKI কার্নেলের সাথে সরবরাহ করা হতে পারে। যখন GKI কার্নেলে কোনো ভেন্ডর মডিউল দ্বারা প্রদত্ত সক্ষমতা থাকে, তখন সেই ভেন্ডর মডিউলটি লোড হবে না। উদাহরণস্বরূপ, Android 11-এ GKI-এর জন্য CONFIG_GREYBUS সেট করা নেই, তাই ভেন্ডররা গ্রেবাস ভেন্ডর মডিউল সরবরাহ করতে পারে। তবে, Android 12-এ CONFIG_GREYBUS একটি GKI বিল্ট-ইন বা মডিউল হিসেবে সক্রিয় করা হতে পারে, সেক্ষেত্রে গ্রেবাস ভেন্ডর মডিউলগুলো লোড হবে না। একটি উত্তম অনুশীলন হলো, যদি ভেন্ডর-নির্দিষ্ট নয় এমন ড্রাইভারগুলো ভেন্ডর মডিউল হিসেবে সরবরাহ করা হয়, তবে সেগুলোর আপস্ট্রিম সংস্করণ ব্যবহার করা।
আপনি ভেন্ডর মডিউলগুলো vendor অথবা vendor_boot ইমেজে সরবরাহ করতে পারেন। বুট প্রক্রিয়ার শুরুতে প্রয়োজনীয় মডিউলগুলো অবশ্যই vendor_boot এ থাকতে হবে। vendor_boot থেকে মডিউল লোড করার সাথে একটি বুট-টাইম খরচ জড়িত থাকে।