دو نوع ماژول هسته وجود دارد: ماژولهای سختافزار آگنوستیک GKI و ماژولهای فروشنده مخصوص سختافزار. این صفحه یک نمای کلی از هر دو نوع ماژول ارائه می دهد.
ماژولهای Generic Kernel Image (GKI) برای ارائه عملکرد هسته غیر بوت مورد نیاز جدا از هسته اصلی عمومی استفاده میشوند. با ماژولهای GKI، میتوانید عملکرد هسته خاصی را برای استفاده انتخاب کنید، که اغلب اندازه تصویر هسته و مصرف حافظه زمان اجرا را کاهش میدهد. کاهش اندازه باعث میشود که GKI برای دستگاههای Android Go و سایر فاکتورهای فرم محدود شده با منابع مناسب باشد.
ماژولهای GKI همچنین مکانیزمی را ارائه میکنند که به فروشندگان اجازه میدهد ویژگیهای جدید بالادستی را پس از نقطه عطف انجماد KMI ترکیب کنند. کد داخلی را نمی توان بدون ساخت تصویر دیگری جایگزین کرد، در حالی که کد ارائه شده به عنوان یک ماژول را می توان با ماژول دیگری جایگزین کرد.
ماژولهای GKI از زیرساخت امضای زمان ساخت هسته برای تمایز بین GKI و سایر ماژولها در زمان اجرا استفاده میکنند. ماژولهای بدون امضا مجاز به بارگیری هستند تا زمانی که فقط از نمادهایی استفاده کنند که در لیست مجاز ظاهر میشوند یا توسط سایر ماژولهای بدون امضا ارائه شدهاند.
دو نوع منطقی از ماژول های GKI وجود دارد: ماژول GKI محافظت شده و ماژول GKI محافظت نشده .
یک ماژول GKI محافظت شده توسط Google ارائه می شود، به هیچ وجه محدود نمی شود و طوری رفتار می کند که گویی پس از بارگیری با هسته ساخته شده است. علاوه بر این، ماژول های محافظت شده GKI دارای ویژگی های زیر هستند:
- ماژولهای محافظتشده GKI به نمادهای هسته غیر KMI دسترسی دارند که برای ماژولهای فروشنده یا ماژولهای محافظتنشده GKI در دسترس نیستند.
- ماژولهای محافظتشده GKI میتوانند نمادهایی را صادر کنند که بخشی از سطح KMI میشوند تا زمانی که آن نمادها در فهرست نمادها ذکر شده باشند.
- ماژولهای GKI محافظتشده توسط ماژولهای فروشنده قابل لغو نیستند.
یک ماژول محافظت شده GKI کلاس پیش فرض ماژول های GKI است. تمام ماژول های GKI در زمان انجماد KMI محافظت شده در نظر گرفته می شوند.
یک ماژول GKI محافظت نشده می تواند توسط یک ماژول فروشنده لغو شود. پس از مسدود شدن KMI، اگر تیم GKI تصمیم بگیرد که فروشندگان باید اجرای پیشفرض را با نسخهای که شامل ویژگیهای جدید لینوکس بالادستی است، لغو کنند، ممکن است یک ماژول GKI محافظتشده دوباره به عنوان محافظتنشده طبقهبندی شود. در نسخه بعدی GKI، ماژولهای محافظت نشده پس از فرود کد بالادستی در هسته مشترک Android (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
برای GKI در Android 11 تنظیم نشده است، بنابراین فروشندگان ممکن است ماژولهای فروشنده greybus را ارائه دهند. با این حال، CONFIG_GREYBUS
ممکن است به عنوان یک GKI داخلی یا ماژول در Android 12 فعال شود، در این صورت ماژولهای فروشنده greybus بارگیری نمیشوند. بهترین روش استفاده از نسخه بالادستی درایورهای غیر فروشنده خاص در صورتی است که به عنوان ماژول های فروشنده تحویل داده شوند.
شما می توانید ماژول های فروشنده را در vendor
یا تصویر vendor_boot
تحویل دهید. ماژول های مورد نیاز در مراحل اولیه بوت باید در vendor_boot
باشند. هزینه زمان راهاندازی مربوط به بارگیری ماژولها از vendor_boot
است.