پروژه تصویر هسته عمومی (GKI).

هسته محصول ، همچنین به عنوان هسته دستگاه یا هسته OEM شناخته می شود، هسته ای است که شما بر روی دستگاه خود ارسال می کنید. قبل از GKI، هسته محصول از یک سری تغییرات هسته بالادست مشتق شده بود. شکل 1 نشان می دهد که چگونه افزودن هسته یک هسته محصول (هسته OEM/دستگاه) را ایجاد می کند:

ساخت هسته محصول قبل از GKI

شکل 1. ساخت هسته محصول قبل از GKI.

  1. هسته لینوکس با پشتیبانی طولانی مدت (LTS) از kernel.org با وصله‌های مخصوص اندروید اصلاح شد که منجر به یک هسته مشترک Android (ACK) شد.
  2. ACK توسط فروشندگانی که پشتیبانی از سیستم روی یک تراشه (SoC) خود را اضافه کردند، اصلاح شد. فروشندگان همچنین ممکن است بهینه سازی عملکرد یا قدرت را اضافه کنند. هسته به دست آمده ، هسته فروشنده نامیده می شود.
  3. در نهایت، هسته فروشنده توسط OEM ها با درایورهای دستگاه اضافی و سفارشی سازی هایی که آنها لازم می دانند اصلاح شد. هسته حاصل را هسته محصول می نامند.

همه این تغییرات می تواند منجر به این شود که تا 50٪ از کد هسته کد خارج از درخت باشد و نه از هسته های بالادستی لینوکس یا ACK. قبل از GKI، تقریباً هر دستگاهی یک هسته سفارشی داشت که منجر به تکه تکه شدن هسته می شد.

هزینه های تکه تکه شدن

تکه تکه شدن هسته چندین اثر منفی روی جامعه اندروید دارد.

به روز رسانی های امنیتی کار فشرده هستند

وصله‌های امنیتی ذکر شده در بولتن امنیتی Android (ASB) باید در هر یک از هسته‌های دستگاه بکپورت شوند. با این حال، به دلیل تکه تکه شدن هسته، انتشار اصلاحات امنیتی در دستگاه های Android در این زمینه بسیار گران است.

ادغام به روز رسانی های طولانی مدت پشتیبانی شده دشوار است

نسخه‌های با پشتیبانی طولانی‌مدت (LTS) شامل رفع‌های امنیتی و سایر رفع اشکال‌های حیاتی است. ثابت شده است که به روز بودن با نسخه های LTS موثرترین راه برای ارائه اصلاحات امنیتی است. در دستگاه‌های پیکسل، مشخص شد که ۹۰ درصد از مشکلات امنیتی هسته گزارش‌شده در ASB قبلاً برای دستگاه‌هایی که به‌روز می‌مانند برطرف شده‌اند.

با این حال، با تمام تغییرات سفارشی در هسته‌های دستگاه، ادغام اصلاحات LTS در هسته‌های دستگاه دشوار است.

از ارتقاء انتشار پلتفرم اندروید جلوگیری می کند

تکه تکه شدن، ویژگی های جدید اندروید را که نیاز به تغییرات هسته به دستگاه های موجود در این زمینه دارند، دشوار می کند. کد فریم ورک اندروید باید فرض کند که پنج نسخه هسته پشتیبانی می‌شود و هیچ تغییری در هسته برای نسخه جدید پلتفرم ایجاد نشده است (اندروید 10 از هسته‌های 3.18، 4.4، 4.9، 4.14 و 4.19 پشتیبانی می‌کند که در برخی موارد چنین نشده است. با ویژگی های جدید از اندروید 8 در سال 2017 بهبود یافته است).

بازگرداندن تغییرات هسته به لینوکس بالادست دشوار است

با تمام تغییراتی که در هسته ایجاد شده است، اکثر دستگاه های پرچمدار با نسخه هسته ای عرضه می شوند که حداقل 18 ماه از آن گذشته است. به عنوان مثال، هسته 4.14 توسط kernel.org در نوامبر 2017 منتشر شد و اولین گوشی های اندرویدی با استفاده از هسته 4.14 در بهار سال 2019 عرضه شدند.

این تأخیر طولانی بین انتشار هسته بالادستی و محصولات باعث می‌شود که انجمن اندروید نتواند ویژگی‌ها و درایورهای مورد نیاز را به هسته‌های بالادستی وارد کند.

رفع تکه تکه شدن: تصویر هسته عمومی

پروژه Generic Kernel Image (GKI) با یکپارچه سازی هسته اصلی و انتقال SoC و پشتیبانی برد به خارج از هسته هسته به ماژول های فروشنده قابل بارگذاری، به تکه تکه شدن هسته می پردازد. GKI همچنین یک رابط ماژول هسته (KMI) پایدار برای ماژول های فروشنده ارائه می دهد، بنابراین ماژول ها و هسته را می توان به طور مستقل به روز کرد. برخی از ویژگی های هسته GKI عبارتند از:

  • هسته GKI از منابع ACK ساخته شده است.
  • هسته GKI یک ماژول باینری تک هسته ای به علاوه ماژول های قابل بارگیری در هر معماری، در هر نسخه LTS است (در حال حاضر فقط arm64 برای android11-5.4 و android12-5.4 ).
  • هسته GKI با تمام نسخه‌های پلتفرم Android که برای ACK مرتبط پشتیبانی می‌شوند، آزمایش می‌شود. هیچ ویژگی برای طول عمر نسخه هسته GKI حذف نشده است.
  • هسته GKI یک KMI پایدار را در معرض رانندگان یک LTS معین قرار می دهد.
  • هسته GKI حاوی کد مخصوص SoC یا برد نیست.

برای تصویری از معماری GKI، به نمای کلی هسته مراجعه کنید.

GKI یک تغییر پیچیده است که در چندین مرحله با هسته های v5.4 در نسخه پلتفرم اندروید 11 شروع شد.

در حال حاضر دو مرحله GKI وجود دارد:

  • GKI 1.0 در اندروید 11 برای دستگاه هایی با هسته 5.4 معرفی شد. GKI 1.0 برای همه دستگاه‌هایی که دارای هسته 5.4 هستند، حتی دستگاه‌هایی که با Android 12 یا Android 13 راه‌اندازی شده‌اند، اعمال می‌شود.
  • GKI 2.0 در اندروید 12 برای دستگاه هایی با هسته 5.10 معرفی شد و استاندارد جدیدی برای همه دستگاه هایی است که با هسته های 5.10 یا بالاتر عرضه می شوند.

GKI 1.0

در GKI 1.0، دستگاه‌هایی که با هسته نسخه 5.4 راه‌اندازی می‌شوند باید آزمایش GKI را پشت سر بگذارند (آندروید 11 و نسخه‌های جدید پلتفرم منتشر شده). اهداف GKI 1.0 شامل موارد زیر است:

  • هنگام جایگزینی هسته محصول با هسته GKI از رگرسیون در مجموعه تست فروشنده (VTS) یا مجموعه تست سازگاری (CTS) اجتناب کنید.
  • بار شریک مربوط به به روز نگه داشتن هسته آنها با هسته های معمولی AOSP را کاهش دهید.
  • تغییرات اصلی اندروید را در هسته‌ها برای دستگاه‌هایی که در حال ارتقا و راه‌اندازی با نسخه‌های جدید اندروید هستند، اضافه کنید.
  • فضای کاربران اندروید را نشکنید.
  • اجزای سخت افزاری خاص را از هسته اصلی به عنوان ماژول های قابل بارگیری جدا کنید.

برای مستندات GKI 1.0، بخش GKI 1.0 را ببینید.

GKI 2.0

در GKI 2.0، دستگاه‌هایی که با هسته نسخه 5.10 یا بالاتر راه‌اندازی می‌شوند باید با هسته GKI عرضه شوند (از اندروید 12 شروع می‌شود). تصاویر بوت امضا شده در دسترس هستند و به طور منظم با LTS و رفع اشکالات مهم به روز می شوند. از آنجایی که ثبات باینری برای KMI حفظ می شود، می توانید این تصاویر بوت را بدون ایجاد تغییرات در تصاویر فروشنده نصب کنید. اهداف GKI 2.0 شامل موارد زیر است:

  • هنگام جایگزینی هسته محصول با هسته GKI، رگرسیون عملکرد یا قدرت قابل توجهی را معرفی نکنید.
  • شرکا را فعال کنید تا رفع‌های امنیتی هسته و رفع اشکال را بدون دخالت فروشنده ارائه کنند.
  • هزینه به روز رسانی نسخه اصلی هسته را برای دستگاه ها کاهش دهید (به عنوان مثال، از نسخه 5.10 به هسته LTS 2021).
  • با به‌روزرسانی نسخه‌های هسته با فرآیندی واضح برای ارتقا، یک هسته باینری واحد GKI را در هر معماری حفظ کنید.

GKI 2.0 آخرین وضعیت هسته های اندروید را نشان می دهد. اسناد هسته خارج از زیربخش‌های GKI 1.0 و هسته‌های قبلی (<=4.19) معماری GKI 2.0 را منعکس می‌کنند.