هسته های رایج اندروید

کرنل‌های رایج AOSP (که با نام کرنل‌های رایج اندروید یا ACK نیز شناخته می‌شوند) در ادامه‌ی کرنل‌های kernel.org قرار دارند و شامل پچ‌هایی (patch) مورد توجه جامعه‌ی اندروید هستند که با کرنل‌های اصلی یا کرنل‌های با پشتیبانی بلندمدت (LTS) ادغام نشده‌اند. این پچ‌ها می‌توانند شامل موارد زیر باشند:

  • بک‌پورت‌ها و گلچین‌هایی از قابلیت‌های بالادستی مورد نیاز برای ویژگی‌های اندروید
  • ویژگی‌هایی که برای دستگاه‌های اندروید آماده هستند اما هنوز در دست توسعه هستند
  • ویژگی‌های فروشنده/OEM که برای سایر شرکای اکوسیستم مفید هستند

android-mainline شاخه اصلی توسعه برای ویژگی‌های اندروید است. هر زمان که لینوس توروالدز یک نسخه یا کاندید انتشار منتشر کند، Linux mainline در android-mainline ادغام می‌شود. قبل از سال ۲۰۱۹، هسته‌های رایج اندروید با کلون کردن هسته LTS که اخیراً اعلام شده بود و اضافه کردن پچ‌های مخصوص اندروید ساخته می‌شدند. این فرآیند در سال ۲۰۱۹ تغییر کرد تا هسته رایج جدید اندروید از android-mainline منشعب شود. این مدل جدید با دستیابی به همان نتیجه به صورت تدریجی، از تلاش قابل توجه برای ارسال پورت و آزمایش پچ‌های اندروید جلوگیری می‌کند. android-mainline تحت آزمایش مداوم قابل توجهی قرار می‌گیرد، این مدل از روز انتشار شامل یک هسته با کیفیت بالا است.

وقتی یک LTS جدید در بالادست اعلام می‌شود، هسته مشترک مربوطه از android-mainline منشعب می‌شود. این به شرکا اجازه می‌دهد تا قبل از اعلام نسخه LTS، با ادغام از android-mainline ، یک پروژه را آغاز کنند. پس از ایجاد شاخه هسته مشترک جدید، شرکا می‌توانند به طور یکپارچه منبع ادغام را به شاخه جدید تغییر دهند.

سایر شاخه‌های هسته رایج، ادغام‌های منظمی را از هسته LTS مرتبط خود دریافت می‌کنند. این ادغام‌ها معمولاً بلافاصله پس از انتشار نسخه LTS انجام می‌شوند. به عنوان مثال، هنگامی که لینوکس ۶.۱.۷۵ منتشر شد، در هسته رایج ۶.۱ ( android14-6.1 ) ادغام شد. به شرکا اکیداً توصیه می‌شود که هسته‌های خود را به‌روزرسانی کنند تا از LTS و رفع اشکالات خاص اندروید به‌روز باشند.

شاخه هسته ACK KMI

هسته‌های GKI دارای یک رابط ماژول هسته پایدار هستند. KMI به طور منحصر به فرد توسط نسخه هسته و نسخه پلتفرم اندروید شناسایی می‌شود، بنابراین شاخه‌ها ANDROID_RELEASE - KERNEL_VERSION نامگذاری می‌شوند. به عنوان مثال، هسته GKI نسخه ۶.۱ برای اندروید ۱۴، android14-6.1 نامگذاری شده است. برای اندروید ۱۵، هسته GKI با android15-6.6 معرفی شد.

سلسله مراتب هسته مشترک

شاخه‌ای از android-mainline

بالاترین سطح سلسله مراتب هسته مشترک در شکل 1 نشان داده شده است.

ایجاد هسته‌های رایج از هسته اصلی اندروید

شکل ۱. ایجاد هسته‌های رایج از هسته اصلی اندروید

توجه داشته باشید که یک هسته مشترک جدید اندروید android14-6.1 در سال 2022 از android-mainline منشعب شد. در سال 2023، زمانی که LTS بعدی اعلام شد، android15-6.6 از android-mainline منشعب شد.

همانطور که در شکل ۱ نشان داده شده است، هر نسخه کرنل می‌تواند پایه‌ای برای دو کرنل GKI باشد. برای مثال، دو کرنل نسخه ۵.۱۵ عبارتند از android13-5.15 و android14-5.15 که هر دو کرنل‌های ویژگی برای نسخه‌های پلتفرم مربوطه خود هستند. این مورد در مورد ۵.۱۰ نیز صدق می‌کرد؛ android12-5.10 زمانی ایجاد شد که LTS اعلام شد و android13-5.10 در نقطه عطف تکمیل ویژگی‌های کرنل در بهار ۲۰۲۱ از android12-5.10 منشعب شد تا امکان توسعه ویژگی‌های اندروید ۱۳ را فراهم کند. با شروع اندروید ۱۵ (۲۰۲۴)، فقط یک کرنل GKI جدید برای هر نسخه کرنل وجود دارد (کرنل android15-6.1 وجود ندارد).

چرخه حیات شاخه ACK KMI

چرخه حیات یک شاخه ACK KMI در شکل 2 نشان داده شده است.

۶.۶ چرخه حیات شاخه ACK KMI

شکل ۲. ۶.۶ چرخه حیات شاخه ACK KMI

برای روشن شدن فرآیند توسعه و چرخه حیات شاخه‌ها، شکل ۲ بر شاخه‌های ACK KMI برای نسخه ۶.۶ تمرکز دارد.

هر شاخه ACK KMI از سه مرحله که در شکل 2 با رنگ‌های مختلف در هر شاخه نشان داده شده است، عبور می‌کند. همانطور که نشان داده شده است، LTS صرف نظر از مرحله، مرتباً ادغام می‌شود.

مرحله توسعه

وقتی ایجاد می‌شود، یک شاخه ACK KMI وارد مرحله توسعه می‌شود (که در شکل ۲ با عنوان dev مشخص شده است) و برای مشارکت در ویژگی‌های نسخه بعدی پلتفرم اندروید باز است. در شکل ۲، android15-6.6 زمانی ایجاد شد که ۶.۶ به عنوان هسته جدید LTS بالادستی اعلام شد.

مرحله تثبیت

وقتی شاخه ACK KMI تکمیل‌شده اعلام شود، وارد فاز تثبیت می‌شود (که در شکل 2 به عنوان پایدار برچسب‌گذاری شده است). ویژگی‌های همکار و رفع اشکالات همچنان پذیرفته می‌شوند، اما ردیابی KMI برای شناسایی هرگونه تغییری که بر رابط تأثیر می‌گذارد، فعال می‌شود. در این مرحله، تغییرات مربوط به شکستن KMI پذیرفته می‌شوند و تعریف KMI با یک ریتم از پیش تعریف‌شده (معمولاً هر دو هفته یکبار) به‌روزرسانی می‌شود. برای جزئیات بیشتر در مورد نظارت بر KMI، به نمای کلی GKI مراجعه کنید.

فاز منجمد KMI

قبل از اینکه یک نسخه جدید از پلتفرم به AOSP منتقل شود، شاخه ACK KMI فریز می‌شود و تا پایان عمر شاخه فریز می‌ماند. این بدان معناست که هیچ تغییری که KMI را مختل کند پذیرفته نمی‌شود، مگر اینکه یک مشکل امنیتی جدی شناسایی شود که بدون تأثیرگذاری بر KMI پایدار، قابل رفع نباشد. برای جلوگیری از خرابی‌های KMI، برخی از وصله‌های ادغام‌شده از LTS ممکن است اصلاح یا حذف شوند، اگر رفع مشکل برای دستگاه‌های اندروید ضروری نباشد.

وقتی یک شاخه ACK KMI مسدود می‌شود، رفع اشکالات و ویژگی‌های همکار می‌توانند پذیرفته شوند، مادامی که هسته مشترک KMI موجود دچار مشکل نشده باشد. KMI را می‌توان با نمادهای صادر شده جدید گسترش داد، مادامی که رابط‌های تشکیل دهنده KMI فعلی تحت تأثیر قرار نگیرند. وقتی رابط‌های جدید به KMI اضافه می‌شوند، بلافاصله پایدار می‌شوند و با تغییرات آینده قابل خراب شدن نیستند.

برای مثال، تغییری که یک فیلد به ساختار مورد استفاده توسط هسته مشترک رابط KMI اضافه کند، مجاز نیست زیرا تعریف رابط را تغییر می‌دهد:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

با این حال، اضافه کردن یک تابع جدید اشکالی ندارد:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

در طول عمر هسته GKI، سازگاری معکوس با فضای کاربری حفظ می‌شود تا هسته بتواند با خیال راحت برای نسخه پلتفرم اندروید که دستگاه با آن راه‌اندازی شده است، استفاده شود. آزمایش مداوم با نسخه‌های قبلی، سازگاری را حفظ می‌کند. بنابراین در شکل 2، هسته android15-6.6 می‌تواند برای دستگاه‌های اندروید 15 و دستگاه‌های بعدی استفاده شود. از آنجا که نسخه پلتفرم اندروید با نسخه‌های قبلی نیز سازگار است، هسته android14-6.1 می‌تواند برای دستگاه‌های اندروید 15 یا برای راه‌اندازی یا ارتقا استفاده شود.

شماره نسل KMI

اگر در طول فاز تثبیت، ادغام LTS رخ دهد یا پس از آن مشکل امنیتی یا رویداد دیگری رخ دهد که نیاز به پذیرش وصله تغییر KMI داشته باشد، شماره نسل KMI ثبت شده در build.config.common افزایش می‌یابد. نسل فعلی KMI را می‌توان با استفاده از دستور uname پیدا کرد:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

عدد پس از انتشار پلتفرم، نسل KMI است (در این مورد 6 ).

اگر نسل KMI تغییر کند، هسته با ماژول‌های فروشنده‌ای که با نسل قبلی KMI مطابقت دارند سازگار نیست، بنابراین ماژول‌ها باید همزمان با هسته بازسازی و به‌روزرسانی شوند. پس از فریز شدن KMI، انتظار می‌رود تغییرات نسل KMI بسیار نادر باشد.

سازگاری بین هسته‌ها

الزامات سازگاری بین هسته‌های موجود در یک خانواده LTS با هسته‌های جدید GKI در حال تغییر است.

هسته‌های GKI

هسته‌های GKI با تمام نسخه‌های پلتفرم اندروید که از این نسخه هسته پشتیبانی می‌کنند، سازگاری معکوس دارند. علاوه بر این، نسخه‌های پلتفرم اندروید با هسته‌های GKI از نسخه‌های قبلی نیز سازگار هستند. بنابراین می‌توانید با خیال راحت از هسته android14-6.1 که برای اندروید ۱۴ (۲۰۲۳) توسعه داده شده است، روی دستگاه‌هایی که اندروید ۱۵ (۲۰۲۴) را اجرا می‌کنند، استفاده کنید. سازگاری از طریق آزمایش مداوم VTS و CTS هسته‌های GKI با تمام نسخه‌های پشتیبانی شده تأیید می‌شود.

KMI پایدار است به طوری که هسته می‌تواند بدون نیاز به بازسازی ماژول‌های هسته در تصویر فروشنده، به‌روزرسانی شود.

سازگاری KMI بین کرنل‌های مختلف GKI حفظ نمی‌شود. بنابراین، برای مثال، یک کرنل android14-6.1 نمی‌توان بدون بازسازی تمام ماژول‌ها با یک کرنل android15-6.6 جایگزین کرد.

کرنل‌های GKI فقط برای نسخه‌های اولیه و بعدی خود پشتیبانی می‌شوند. آن‌ها برای نسخه‌های قدیمی‌تر پشتیبانی نمی‌شوند. بنابراین کرنل android15-6.6 برای دستگاه‌هایی که اندروید ۱۴ (۲۰۲۳) را اجرا می‌کنند، پشتیبانی نمی‌شود.

ماتریس سازگاری

این جدول نسخه‌های کرنل پشتیبانی‌شده و آزمایش‌شده با هر نسخه از پلتفرم اندروید را نشان می‌دهد.

انتشار پلتفرم اندروید هسته‌های پشتیبانی‌شده
اندروید ۱۶ (۲۰۲۵) android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
اندروید ۱۵ (۲۰۲۴) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
اندروید ۱۴ (۲۰۲۳) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
اندروید ۱۳ (۲۰۲۲) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
اندروید ۱۲ (۲۰۲۱) android12-5.10
android12-5.4
android11-5.4

طول عمر پشتیبانی و وصله‌های امنیتی

ACKها ادغام‌های LTS را از بالادست و رفع اشکالات مربوط به کد مخصوص اندروید دریافت می‌کنند. این رفع اشکالات شامل تمام وصله‌های امنیتی هسته ذکر شده در بولتن‌های امنیتی ماهانه اندروید است که مربوط به ACK هستند.

ممکن است ACKها برای مدت طولانی‌تری نسبت به کرنل پایدار بالادستی مربوطه در kernel.org پشتیبانی شوند. در این حالت، گوگل پشتیبانی طولانی‌تری را تا تاریخ پایان عمر (EOL) که در این بخش نشان داده شده است، ارائه می‌دهد. وقتی کرنل‌ها EOL می‌شوند، دیگر توسط گوگل پشتیبانی نمی‌شوند و دستگاه‌هایی که آنها را اجرا می‌کنند، آسیب‌پذیر در نظر گرفته می‌شوند.

با شروع از هسته ۶.۶، طول عمر پشتیبانی برای هسته‌های پایدار ۴ سال است.

این جدول طول عمر ACK های پشتیبانی شده را نشان می‌دهد:

شاخه ACK راه اندازی
تاریخ
پشتیبانی
طول عمر
(سال)
گذشته
اندروید ۱۱-۵.۴ ۲۰۱۹-۱۱-۲۴ ۶ ۲۰۲۶-۰۱-۰۱
اندروید ۱۲-۵.۴ ۲۰۱۹-۱۱-۲۴ ۶ ۲۰۲۶-۰۱-۰۱
اندروید ۱۲-۵.۱۰ ۲۰۲۰-۱۲-۱۳ ۶ ۲۰۲۷-۰۷-۰۱
اندروید ۱۳-۵.۱۰ ۲۰۲۰-۱۲-۱۳ ۶ ۲۰۲۷-۰۷-۰۱
اندروید ۱۳-۵.۱۵ ۲۰۲۱-۱۰-۳۱ ۶ ۲۰۲۸-۰۷-۰۱
اندروید ۱۴-۵.۱۵ ۲۰۲۱-۱۰-۳۱ ۶ ۲۰۲۸-۰۷-۰۱
اندروید ۱۴-۶.۱ ۲۰۲۲-۱۲-۱۱ ۶ ۲۰۲۹-۰۷-۰۱
اندروید ۱۵-۶.۶ 2023-10-29 ۴ ۲۰۲۸-۰۷-۰۱
اندروید ۱۶-۶.۱۲ ۲۰۲۴-۱۱-۱۷ ۴ ۲۰۲۹-۰۷-۰۱

تست هسته رایج

هسته‌های رایج علاوه بر آزمایش‌های بعدی توسط فروشندگان، با چندین سیستم CI نیز آزمایش می‌شوند.

تست عملکردی هسته لینوکس

تست‌های عملکردی هسته لینوکس (LKFT) مجموعه‌های تست مختلفی از جمله kselftest، LTP، VTS و CTS را روی مجموعه‌ای از دستگاه‌های فیزیکی arm32 و arm64 آغاز می‌کنند. نتایج آزمایش‌های اخیر را می‌توانید در صفحه android-lkft بیابید.

تست KernelCI

آزمایش‌های ساخت و راه‌اندازی KernelCI هر زمان که یک وصله جدید به یک شاخه هسته مشترک ارسال شود، آغاز می‌شوند. چند صد پیکربندی ساخت آزمایش و روی بردهای مختلف راه‌اندازی می‌شوند. نتایج اخیر برای هسته‌های اندروید را می‌توانید در سایت KernelCL بیابید.

تست پیش‌ارسال و پس‌ارسال اندروید

آزمایش‌های پیش از ارسال برای جلوگیری از ورود خطا به هسته‌های رایج اندروید استفاده می‌شوند. خلاصه نتیجه آزمایش را می‌توانید در برگه «بررسی‌ها» در تغییر کد در هسته رایج اندروید gerrit پیدا کنید.

تست ارسال‌های اندروید (Android postsubmit testing) روی نسخه‌های جدید منتشر شده در شاخه‌های هسته مشترک اندروید، زمانی که پچ‌های جدید به یک شاخه هسته مشترک اندروید در ci.android.com ارسال می‌شوند، انجام می‌شود. با وارد کردن aosp_kernel به عنوان نام شاخه جزئی در ci.android.com ، لیستی از شاخه‌های هسته با نتایج موجود را مشاهده خواهید کرد. به عنوان مثال، نتایج مربوط به android-mainline را می‌توانید در داشبورد ادغام ساخت مداوم اندروید (Android CI) پیدا کنید. برای یافتن وضعیت تست در تب Test Results ، روی یک نسخه خاص کلیک کنید.

تست‌هایی که توسط نگاشت تست با گروه تست kernel-presubmit در درخت منبع پلتفرم اندروید تعریف می‌شوند، به عنوان presubmit برای شاخه‌های هسته اندروید اجرا می‌شوند. به عنوان مثال، پیکربندی زیر در test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING، vts_kernel_proc_file_api_test به عنوان تست presubmit در بررسی کد هسته مشترک اندروید فعال می‌کند.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

آزمایش صفر روزه

تست روز صفر، تست پچ به پچ را روی تمام شاخه‌های کرنل رایج اندروید، زمانی که پچ‌های جدید اعمال می‌شوند، انجام می‌دهد. تست‌های مختلف بوت، عملکردی و کارایی اجرا می‌شوند. به گروه عمومی cross-kernel-buildreports بپیوندید.

ماتریس آزمون

هسته مشترک اندروید نسخه‌های پلتفرم اندروید مجموعه‌های تست
اصلی ۱۶ ۱۵ ۱۴ ۱۳ ۱۲ LKFT هسته CI پیش ارسال ارسال پست ۰ روزه
android-mainline
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4

مشارکت در توسعه هسته‌های رایج اندروید

به طور کلی، توسعه ویژگی‌ها باید روی لینوکس اصلی انجام شود و نه روی هسته‌های رایج اندروید. توسعه بالادستی به شدت تشویق می‌شود و پس از پذیرش توسعه در آنجا، می‌توان آن را در صورت نیاز به شاخه ACK خاص، بک‌پورت کرد. تیم هسته اندروید خوشحال است که از تلاش‌های بالادستی به نفع اکوسیستم اندروید پشتیبانی کند.

وصله‌ها را به گریت ارسال کنید و با این دستورالعمل‌های مشارکت مطابقت داشته باشید.