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