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

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

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

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

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

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

شاخه هسته ACK KMI

هسته های GKI دارای یک رابط ماژول هسته پایدار هستند. KMI به طور منحصر به فرد توسط نسخه هسته و نسخه پلتفرم اندروید شناسایی می شود، بنابراین شاخه ها ANDROID_RELEASE - KERNEL_VERSION نامیده می شوند. به عنوان مثال، هسته 6.1 GKI برای اندروید 14، android14-6.1 نام دارد. برای اندروید 15 (AOSP آزمایشی)، هسته GKI android15-6.6 معرفی شد.

ویژگی ها و راه اندازی هسته ها

قبل از Android 15 (تجربی AOSP)، هر یک از سه هسته اخیر را می توان برای راه اندازی دستگاه استفاده کرد. با شروع Android 15 (AOSP آزمایشی)، دو نسخه اخیر هسته را می توان برای راه اندازی دستگاه استفاده کرد. هسته های راه اندازی برای Android 15 (AOSP آزمایشی) android15-6.6 و android14-6.1 هستند.

از آنجایی که هنگام به‌روزرسانی نسخه پلتفرم نیازی به ارتقای هسته نیست، هسته‌هایی که آخرین ویژگی‌های نسخه پلتفرم را ندارند همچنان می‌توانند برای راه‌اندازی دستگاه‌ها استفاده شوند. بنابراین هسته‌هایی که برای Android 14 طراحی شده‌اند، مانند android14-6.1 ، می‌توانند در دستگاه‌ها حتی پس از ارتقاء نسخه پلتفرم به Android 15 (AOSP آزمایشی) استفاده شوند.

انتشار پلتفرم اندروید هسته ها را راه اندازی کنید هسته های ویژگی
Android 15 (AOSP تجربی) (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10 1
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10 1
android12-5.4 1
android11-5.4 1
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4 1
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 اگر BSP مرتبط برای انتشار پلتفرم به‌روزرسانی شده باشد، ممکن است محدودیت‌های اضافی اعمال شود. به عبارت کلی تر، شماره انتشار Android هسته باید بالاتر یا برابر با نسخه FCM هدف باشد. برای جزئیات، به Object Interface Vendor مراجعه کنید - شاخه‌های هسته را مطابقت دهید .

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

شعبه از android-mainline

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

ایجاد کرنل های مشترک از هسته اصلی اندروید

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

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

همانطور که در شکل 1 نشان داده شده است، هر نسخه هسته می تواند مبنایی برای دو هسته GKI باشد. به عنوان مثال، دو هسته v5.15 android13-5.15 و android14-5.15 هستند که هر دو هسته های ویژگی برای نسخه های پلتفرم مربوطه خود هستند. این مورد برای 5.10 نیز بود. android12-5.10 زمانی ایجاد شد که LTS اعلام شد و android13-5.10 از android12-5.10 در نقطه عطف کامل ویژگی هسته در بهار 2021 منشعب شد تا امکان توسعه ویژگی‌ها برای Android 13 فراهم شود. از Android 15 (AOSP آزمایشی) (2024) شروع شد. در هر نسخه هسته فقط یک هسته GKI جدید وجود دارد (هیچ هسته android15-6.1 وجود ندارد).

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

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

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

شکل 2. 6.6 چرخه حیات شاخه ACK KMI

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

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

مرحله توسعه

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

مرحله تثبیت

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

فاز منجمد KMI

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

هنگامی که یک شاخه 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 را می توان برای دستگاه های Android 15 (AOSP آزمایشی) و دستگاه های بعدی استفاده کرد. از آنجایی که نسخه پلتفرم اندروید با نسخه های قبلی نیز سازگار است، هسته android14-6.1 می تواند برای دستگاه های Android 15 (AOSP آزمایشی) برای راه اندازی یا ارتقا استفاده شود.

شماره نسل 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 توسعه‌یافته برای Android 14 (2023) در دستگاه‌های دارای Android 15 (AOSP آزمایشی) (2024) استفاده کنید. سازگاری از طریق آزمایش مداوم VTS و CTS هسته های GKI با همه نسخه های پشتیبانی شده تأیید می شود.

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

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

هسته های GKI فقط برای نسخه های اولیه و بعدی خود پشتیبانی می شوند. برای نسخه‌های قدیمی‌تر پشتیبانی نمی‌شوند. بنابراین، هسته android15-6.6 برای دستگاه‌هایی که Android 14 (2023) دارند پشتیبانی نمی‌شود.

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

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

انتشار پلتفرم اندروید هسته های پشتیبانی شده برای ارتقا هسته های پشتیبانی شده برای راه اندازی
Android 15 (AOSP تجربی) (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

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

هسته‌های رایج Android تا زمانی که هسته LTS مرتبط یا نسخه پلتفرم Android دیگر پشتیبانی نشود، پشتیبانی می‌شوند. در حالی که یک هسته پشتیبانی می شود، همچنان به دریافت ادغام LTS از بالادست و رفع اشکال برای کدهای خاص اندروید ادامه می دهد. این اصلاحات شامل تمام وصله‌های امنیتی هسته ذکر شده در بولتن‌های امنیتی ماهانه اندروید است که مربوط به هسته‌های رایج اندروید هستند.

شرکا می توانند مطمئن باشند که با استفاده از هسته های GKI، تمام وصله های امنیتی هسته را دریافت می کنند.

آزمایش هسته رایج

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

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

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

تست KernelCI

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

Android presubmit and postsubmit testing

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

تست ارسال پست اندروید روی بیلدهای جدید منتشر شده در شاخه‌های هسته مشترک اندروید زمانی انجام می‌شود که وصله‌های جدید به یک شاخه هسته مشترک اندروید در ci.android.com متعهد می‌شوند. با وارد کردن aosp_kernel به عنوان یک نام جزئی شاخه در ci.android.com ، فهرستی از شاخه‌های هسته را با نتایج موجود مشاهده می‌کنید. برای مثال، نتایج مربوط به android-mainline را می‌توانید در اینجا پیدا کنید. وقتی روی یک ساخت خاص کلیک می‌کنید، وضعیت تست را در برگه Test Results خواهید دید.

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

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

تست 0 روزه

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

ماتریس تست

هسته مشترک اندروید نسخه های پلتفرم اندروید مجموعه های تست
اصلی 15 14 13 12 11 10 LKFT KernelCI پیش ارسال کنید ارسال ارسال کنید 0 روزه
android-mainline
android5-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

به هسته های رایج اندروید کمک کنید

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

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