هستههای رایج AOSP (همچنین به عنوان هستههای رایج Android یا ACK شناخته میشوند) در پایین دست هستههای kernel.org هستند و شامل وصلههای مورد علاقه جامعه Android هستند که در هستههای خط اصلی یا پشتیبانی بلندمدت (LTS) ادغام نشدهاند. این پچ ها می توانند شامل موارد زیر باشند:
- پورتهای پشتیبان و انتخابهای گیلاس از عملکردهای بالادستی مورد نیاز برای ویژگیهای Android
- ویژگیهای آماده برای دستگاههای Android اما هنوز در دست توسعه هستند (به عنوان مثال، Energy Aware Scheduler بهینهسازی قرار دادن وظایف).
- ویژگی های فروشنده / OEM که برای سایر شرکای اکوسیستم مفید است (به عنوان مثال، sdcardfs).
android-mainline
شاخه اصلی توسعه ویژگی های اندروید است. هر زمان که لینوس توروالدز یک نامزد انتشار یا انتشار پست میکند، خط اصلی لینوکس در android-mainline
ادغام میشود. قبل از سال 2019، هستههای رایج اندروید با شبیهسازی هسته LTS اخیراً اعلامشده و افزودن پچهای مخصوص اندروید ساخته میشدند. این فرآیند در سال 2019 تغییر کرد تا هسته مشترک جدید اندروید از android-mainline
منشعب شود. این مدل جدید از تلاش قابل توجه برای ارسال پورت و آزمایش وصلههای اندرویدی با انجام همان نتیجه به صورت تدریجی جلوگیری میکند. android-mainline
تحت آزمایش های مداوم قابل توجهی قرار می گیرد، این مدل از روز انتشار هسته با کیفیت بالایی را تضمین می کند.
هنگامی که یک LTS جدید در بالادست اعلام می شود، هسته مشترک مربوطه از android-mainline
منشعب می شود. این به شرکا اجازه می دهد تا پروژه ای را قبل از اعلام نسخه LTS با ادغام از android-mainline
آغاز کنند. پس از ایجاد شاخه جدید هسته مشترک، شرکا می توانند به طور یکپارچه منبع ادغام را به شاخه جدید تغییر دهند.
سایر شاخه های هسته معمولی ادغام های منظم را از هسته LTS مرتبط خود دریافت می کنند. این ادغام ها معمولاً بلافاصله پس از ارسال نسخه LTS انجام می شود. به عنوان مثال، زمانی که لینوکس 4.19.64 پست شد، در هسته های رایج 4.19 ادغام شد (به عنوان مثال، android-4.19-q
). شرکا به شدت تشویق می شوند که به طور منظم از هسته های رایج در هسته های محصول خود ادغام شوند تا با رفع اشکالات خاص LTS و اندروید به روز بمانند.
شاخه هسته ACK KMI
هسته های GKI دارای یک رابط ماژول هسته پایدار هستند. KMI به طور منحصربهفردی با نسخه هسته و نسخه پلتفرم اندروید شناسایی میشود، بنابراین شاخهها <androidRelease>-<kernel version>
نامگذاری میشوند. به عنوان مثال، هسته 5.4 GKI برای اندروید 11 android11-5.4.
برای اندروید 12 دو هسته GKI اضافی وجود دارد، android12-5.4
و android12-5.10
.
شاخه های هسته دسر میراثی
هستههای دسر قدیمی برای تضمین عدم تداخل توسعه ویژگیهای جدید با ادغام هسته مشترک اندروید ایجاد شدند. شاخهها قبل از انتشار دسر مرتبط ایجاد شدهاند و ادغامهای منظمی از LTS دریافت میکنند، اما هیچ ویژگی جدیدی ندارند. به عنوان مثال، android-4.9-q
ادغام ها را از شاخه LTS 4.9.y دریافت می کند.
اگر یک نسخه هسته یک هسته راهاندازی نبود، هیچ هسته دسری ایجاد نمیشد، اما هسته مرتبط با آخرین نسخه پلتفرم برای ارتقا به نسخههای بعدی پلتفرم اندروید معتبر است. برای مثال، android-4.9-q
آخرین شاخه دسر android-4.9*
بود، بنابراین با نسخه اصلی پلتفرم خود، اندروید 10، پشتیبانی و آزمایش شده است. همچنین با نسخههای پلتفرمی که از ارتقای دستگاههای دارای نسخه 4.9 پشتیبانی میکنند، پشتیبانی و آزمایش میشود. هسته ها: اندروید 11 و اندروید 12.
از آنجایی که طرح نامگذاری دسر برای نسخههای پلتفرم اندروید با اندروید 10 حذف شد، آخرین نسخههای دسر که android-4.14-r
و android-4.19-r
نامیده میشدند، در عوض android-4.14-stable
و android-4.19-stable
نامیده شدند.
هسته های دسر با هسته های GKI که با اندروید 11 شروع می شود جایگزین می شوند، بنابراین لیست کامل هسته های دسر پشتیبانی شده در این جدول آمده است.
انتشار پلتفرم اندروید | هسته | پشتیبانی تا |
---|---|---|
اندروید 10 | android-4.9-q android-4.14-q android-4.19-q | ژانویه 2023 |
اندروید 11 | android-4.14-stable android-4.19-stable | ژانویه 2024 |
شاخه های هسته انتشار قدیمی
هستههای انتشار برای ارائه پسپورتهای وصلههای ذکر شده در بولتن امنیتی ماهانه Android نگهداری میشوند. آنها برای هر هسته راهاندازی زمانی که نسخه جدید پلتفرم اندروید منتشر شد ایجاد شدند. وقتی هسته یا نسخه پلتفرم مرتبط منسوخ میشود، همانطور که در طول عمر پشتیبانی و وصلههای امنیتی توضیح داده شده است، منسوخ میشوند.
هر ماه که بولتن امنیتی اندروید منتشر میشود، این هستهها با پسپورتهای وصلههای ذکر شده در بولتن که مربوط به هستههای بالادستی و هستههای رایج اندروید هستند، بهروزرسانی میشوند. آنها وصله های LTS را دریافت نمی کنند، بنابراین شماره نسخه جزئی هرگز تغییر نمی کند. آنها حاوی بکپورت برای وصله های خاص فروشنده نیستند.
در نسخههای Android 11 و نسخههای جدیدتر پلتفرم، شرکا باید از هستههای دسر یا GKI ادغام شوند تا وصلههای ذکر شده در بولتن امنیتی Android را اعمال کنند. هیچ هسته انتشاری برای نسخه های پلتفرم اندروید 11 یا جدیدتر ایجاد نخواهد شد.
بنابراین، لیست کامل 14 هسته انتشار در این جدول نشان داده شده است و هیچ کدام اضافه نخواهد شد.
انتشار پلتفرم اندروید | هسته | پشتیبانی تا |
---|---|---|
اندروید 10 | android-4.9-q-release android-4.14-q-release android-4.19-q-release | ژانویه 2023 |
ویژگی ها و راه اندازی هسته ها
هر نسخه پلتفرم اندروید از راه اندازی دستگاه های جدید بر اساس هر یک از سه نسخه هسته لینوکس پشتیبانی می کند. همانطور که در جدول زیر نشان داده شده است، هسته های راه اندازی برای اندروید 11 عبارتند از android-4.14-stable
، android-4.19-stable
و android11-5.4
.
از آنجایی که معمولاً هنگام بهروزرسانی نسخه پلتفرم نیازی به ارتقای هسته نیست، هستههایی که آخرین ویژگیهای نسخه پلتفرم را ندارند همچنان میتوانند برای راهاندازی دستگاهها استفاده شوند. بنابراین هستههایی که برای Android 10 طراحی شدهاند، مانند android-4.19-q
، میتوانند در دستگاهها حتی پس از ارتقاء نسخه پلتفرم به اندروید 11 استفاده شوند. با شروع اندروید 12، هستههای ویژگی کمتری نسبت به هستههای راهاندازی وجود خواهد داشت تا تعداد آنها محدود شود. KMI های پایداری که باید پشتیبانی شوند.
انتشار پلتفرم اندروید | هسته ها را راه اندازی کنید | هسته های ویژه |
---|---|---|
Android 14 (2023) | android14-6.1 android14-5.15 android13-5.15 android13-5.10 android12-5.10 1 android12-5.4 1 android11-5.4 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 android-4.14-stable | android11-5.4 android-4.19-stable android-4.14-stable |
اندروید 10 (2019) | android-4.19-q android-4.14-q android-4.9-q | android-4.19-q android-4.14-q android-4.9-q |
1 اگر BSP مرتبط برای انتشار پلتفرم بهروزرسانی شده باشد، ممکن است محدودیتهای اضافی اعمال شود. به عبارت کلی تر، شماره انتشار Android هسته باید بالاتر یا برابر با نسخه FCM هدف باشد. برای جزئیات، به Object Interface Vendor مراجعه کنید - شاخههای هسته را مطابقت دهید . |
سلسله مراتب هسته مشترک
شعبه از android-mainline
سطح بالای سلسله مراتب هسته مشترک در شکل 1 نشان داده شده است.
شکل 1. ایجاد کرنل های مشترک از هسته اصلی اندروید
توجه داشته باشید که هسته مشترک جدید اندروید android12-5.10
در سال 2020 از android-mainline
منشعب شد. در سال 2021، زمانی که LTS بعدی اعلام شد، android13-5.15
از android-mainline
منشعب شد.
همانطور که در شکل 1 نشان داده شده است، هر نسخه هسته پایه دو هسته GKI است. به عنوان مثال، دو هسته نسخه 5.4 android11-5.4
و android12-5.4
هستند که هر دو هسته های ویژگی برای نسخه های پلتفرم مربوطه خود هستند. این مورد برای 5.10 نیز صادق خواهد بود. android12-5.10
زمانی ایجاد شد که LTS اعلام شد و android13-5.10
از android12-5.10
در نقطه عطف کامل ویژگی هسته در بهار 2021 منشعب می شود تا امکان توسعه ویژگی ها برای Android 13 را فراهم کند.
چرخه حیات شاخه ACK KMI
چرخه حیات یک شاخه ACK KMI در شکل 2 در زیر نشان داده شده است.
شکل 2. 5.10 چرخه حیات شاخه ACK KMI
برای روشن شدن فرآیند توسعه و چرخه حیات شاخه، شکل 2 بر شاخه های ACK KMI برای 5.10 تمرکز دارد.
هر شاخه ACK KMI در سه مرحله که در شکل 2 با رنگ های مختلف در هر شاخه نشان داده شده است، چرخش می کند. همانطور که نشان داده شده است، LTS به طور منظم بدون توجه به فاز ادغام می شود.
مرحله توسعه
وقتی ایجاد شد، یک شاخه ACK KMI وارد فاز توسعه میشود ( توسعهدهنده در شکل 2)، و برای مشارکت در ویژگیها برای نسخه بعدی پلتفرم اندروید باز است. در شکل 2، android12-5.10
زمانی ایجاد شد که 5.10 به عنوان هسته جدید بالادستی LTS اعلام شد. دومین شاخه ACK KMI برای یک نسخه هسته ممکن است زودتر ایجاد شود تا امکان توسعه نسخه بعدی فراهم شود. در شکل 2، android13-5.10
زمانی ایجاد می شود که android12-5.10
از مرحله توسعه خارج می شود.
مرحله تثبیت
هنگامی که شاخه ACK KMI کامل اعلام شد، وارد فاز تثبیت میشود که در شکل 2 به عنوان stab مشخص شده است. ویژگیهای شریک و رفع اشکال همچنان پذیرفته میشوند، اما ردیابی 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، هسته android12-5.10
را می توان برای دستگاه های Android 12 و دستگاه های Android 13 استفاده کرد. از آنجا که نسخه پلتفرم اندروید با نسخه های قبلی نیز سازگار است، هسته android12-5.4
را می توان برای دستگاه های Android 13 برای راه اندازی یا ارتقاء استفاده کرد.
هنگام ورود به فاز منجمد، شاخه با رشته نسخه KMI حاوی شماره تولید KMI برچسب git می شود. به عنوان مثال، زمانی که android11-5.4
ثابت بود، با رشته نسخه KMI 5.4-android11-0
برچسب گذاری شد که در آن 0
انتهایی شماره نسل KMI است. اگر مشکل امنیتی یا رویداد دیگری وجود داشته باشد که مستلزم پذیرش وصله تغییر KMI باشد، شماره تولید KMI افزایش یافته و شاخه مجدداً برچسب گذاری می شود. به عنوان مثال، اگر چنین تغییری در android11-5.4
پذیرفته شود، شعبه با نسخه جدید KMI، 5.4-android11-1
برچسب گذاری می شود. نسل فعلی KMI را می توان با استفاده از دستور uname
پیدا کرد:
$ uname -r
5.4.61-android11-0-00153-ga972f59040e4
عدد پس از انتشار پلتفرم، نسل KMI است (0 در این مورد).
اگر نسل KMI تغییر کند، هسته با ماژول های فروشنده مطابق با نسل قبلی KMI سازگار نیست، بنابراین ماژول ها باید به طور همزمان با هسته بازسازی و به روز شوند. انتظار می رود تغییرات نسل KMI بسیار نادر باشد.
سازگاری بین هسته ها
الزامات سازگاری بین هستههای خانواده LTS با شروع هستههای جدید GKI در حال تغییر است.
هسته های GKI
هستههای GKI با تمام نسخههای پلتفرم اندرویدی که از نسخه هسته پشتیبانی میکنند، سازگاری رو به عقب را حفظ میکنند. علاوه بر این، نسخههای پلتفرم اندروید با هستههای GKI نسخههای قبلی سازگار هستند. بنابراین میتوانید با خیال راحت از هسته android12-5.4
توسعهیافته برای Android 12 در دستگاههای دارای Android 13 استفاده کنید. سازگاری از طریق آزمایش مداوم VTS و CTS هستههای GKI با همه نسخههای پشتیبانیشده تأیید میشود.
KMI پایدار است به طوری که می توان هسته را بدون نیاز به بازسازی ماژول های هسته در تصویر فروشنده به روز کرد.
سازگاری KMI بین هسته های مختلف GKI حفظ نمی شود. بنابراین، برای مثال، یک android12-5.10
نمی توان با هسته android13-5.10
بدون بازسازی همه ماژول ها جایگزین کرد.
هسته های GKI فقط برای نسخه های اولیه و بعدی خود پشتیبانی می شوند. برای نسخههای قدیمیتر پشتیبانی نمیشوند. بنابراین هسته android13-5.10
در دستگاه های Android 12 پشتیبانی نمی شود.
هسته های میراثی
هستههای دسر قدیمی ( *-q
و *-stable
) با نسخههای پلتفرم اندروید سازگار نیستند، اما هستههای دو نسخه قبلی پلتفرم اندروید برای ارتقا پشتیبانی میشوند. بنابراین، دستگاهی که با Android 10 با استفاده از هسته مبتنی بر android-4.19-q
راه اندازی شده است، می تواند هنگام ارتقا به Android 2020 به استفاده از هسته android-4.19-q
ادامه دهد یا کد خاص فروشنده را برای پشتیبانی از android-4.19-stable
به روز کند. .
ماتریس سازگاری
این جدول نسخه های هسته پشتیبانی شده و آزمایش شده با هر نسخه پلتفرم اندروید را نشان می دهد.
انتشار پلتفرم اندروید | هسته های پشتیبانی شده برای ارتقا | هسته های پشتیبانی شده برای راه اندازی |
---|---|---|
Android 14 (2023) | android14-6.1 | android14-6.1 |
Android 13 (2022) | android13-5.15 | android13-5.15 |
Android 12 (2021) | android12-5.10 | android-4.19-stable |
Android 11 (2020) | android11-5.4 | android11-5.4 |
اندروید 10 (2019) | android-4.14-stable | android-4.14-stable |
پشتیبانی از طول عمر و وصله های امنیتی
هستههای رایج Android تا زمانی که هسته LTS مرتبط یا نسخه پلتفرم Android دیگر پشتیبانی نشود، پشتیبانی میشوند. در حالی که یک هسته پشتیبانی می شود، همچنان به دریافت ادغام LTS از بالادست و رفع اشکال برای کدهای خاص اندروید ادامه می دهد. این اصلاحات شامل تمام وصلههای امنیتی هسته ذکر شده در بولتنهای امنیتی ماهانه اندروید است که مربوط به هستههای رایج اندروید هستند.
شرکا می توانند مطمئن باشند که با ادغام منظم از هسته های رایج اندروید، تمام وصله های امنیتی هسته ممکن را دریافت می کنند.
آزمایش هسته رایج
هسته های رایج علاوه بر تست پایین دستی توسط فروشندگان، با چندین سیستم CI آزمایش می شوند.
تست عملکردی هسته Linex
تستهای تست عملکردی هسته Linex (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 بپیوندید
ماتریس تست
هسته مشترک اندروید | نسخه های پلتفرم اندروید | مجموعه های تست | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
اصلی | 14 | 13 | 12 | 11 | 10 | LKFT | KernelCI | پیش ارسال کنید | ارسال ارسال | 0 روزه | |
android-mainline | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | android13-5.15 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-stable | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
به هسته های رایج اندروید کمک کنید
به طور کلی، توسعه ویژگی ها باید در لینوکس خط اصلی انجام شود و نه بر روی هسته های رایج اندروید. توسعه بالادستی به شدت تشویق می شود، و پس از پذیرش توسعه در آنجا، می توان آن را به راحتی در صورت نیاز به شعبه ACK خاص بکپورت کرد. تیم Android Kernel خوشحال است که از تلاشهای بالادستی به نفع اکوسیستم اندروید پشتیبانی میکند.
وصله ها را به Gerrit ارسال کنید و با این دستورالعمل های مشارکت مطابقت دهید.