هستههای رایج 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، هسته GKI android15-6.6
معرفی شد.
ویژگی ها و راه اندازی هسته ها
قبل از اندروید 15، هر یک از سه هسته اخیر میتوانست برای راهاندازی دستگاه استفاده شود. با شروع اندروید 15، می توان از دو نسخه اخیر هسته برای راه اندازی دستگاه استفاده کرد. هسته های راه اندازی برای اندروید 15 عبارتند از android15-6.6
و android14-6.1
.
از آنجایی که هنگام بهروزرسانی نسخه پلتفرم نیازی به ارتقای هسته نیست، هستههایی که آخرین ویژگیهای نسخه پلتفرم را ندارند همچنان میتوانند برای راهاندازی دستگاهها استفاده شوند. بنابراین هستههایی که برای اندروید 14 طراحی شدهاند، مانند android14-6.1
، میتوانند حتی پس از ارتقاء نسخه پلتفرم به اندروید 15 در دستگاهها استفاده شوند.
انتشار پلتفرم اندروید | هسته ها را راه اندازی کنید | هسته های ویژگی |
---|---|---|
Android 15 (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 | android14-6.1 android14-5.15 |
Android 13 (2022) | android13-5.15 android13-5.10 android12-5.10 android12-5.4 android11-5.4 | android13-5.15 android13-5.10 |
Android 12 (2021) | android12-5.10 android12-5.4 android11-5.4 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 (2024)، تنها یک مورد جدید وجود دارد. هسته GKI در هر نسخه هسته (هیچ هسته android15-6.1
وجود ندارد).
چرخه حیات شاخه ACK KMI
چرخه حیات یک شاخه ACK KMI در شکل 2 در زیر نشان داده شده است.
شکل 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 و دستگاه های جدیدتر استفاده کرد. از آنجایی که نسخه پلتفرم اندروید نیز با نسخه های قبلی سازگار است، هسته android14-6.1
می تواند برای دستگاه های Android 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
توسعهیافته برای Android 14 (2023) در دستگاههای دارای Android 15 (2024) استفاده کنید. سازگاری از طریق آزمایش مداوم VTS و CTS هسته های GKI با همه نسخه های پشتیبانی شده تأیید می شود.
KMI پایدار است به طوری که می توان هسته را بدون نیاز به بازسازی ماژول های هسته در تصویر فروشنده به روز کرد.
سازگاری KMI بین هسته های مختلف GKI حفظ نمی شود. بنابراین، برای مثال، یک هسته android14-6.1
را نمی توان با یک هسته android15-6.6
بدون بازسازی همه ماژول ها جایگزین کرد.
هسته های GKI فقط برای نسخه های اولیه و بعدی خود پشتیبانی می شوند. برای نسخههای قدیمیتر پشتیبانی نمیشوند. بنابراین هسته android15-6.6
برای دستگاههایی که Android 14 (2023) دارند پشتیبانی نمیشود.
ماتریس سازگاری
این جدول نسخه های هسته پشتیبانی شده و آزمایش شده با هر نسخه پلتفرم اندروید را نشان می دهد.
انتشار پلتفرم اندروید | هسته های پشتیبانی شده برای ارتقا | هسته های پشتیبانی شده برای راه اندازی |
---|---|---|
Android 15 (2024) | android15-6.6 | android15-6.6 |
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 |
پشتیبانی از طول عمر و وصله های امنیتی
ACK ها ادغام LTS را از بالادست و رفع اشکال برای کدهای مخصوص اندروید دریافت می کنند. این اصلاحات شامل تمام وصلههای امنیتی هسته ذکر شده در بولتنهای امنیتی ماهانه Android است که مربوط به ACK هستند.
ACK ها ممکن است برای مدت بیشتری از هسته پایدار بالادستی مربوطه در kernel.org پشتیبانی شوند. در این مورد، Google پشتیبانی طولانی مدت را تا تاریخ پایان عمر (EOL) نشان داده شده در این بخش ارائه می دهد. وقتی هستهها EOLed میشوند، دیگر توسط Google پشتیبانی نمیشوند و دستگاههایی که آنها را اجرا میکنند آسیبپذیر در نظر گرفته میشوند.
با شروع کرنل 6.6، طول عمر پشتیبانی برای هسته های پایدار 4 سال است.
این جدول طول عمر ACK های پشتیبانی شده را نشان می دهد:
شعبه ACK | راه اندازی کنید تاریخ | پشتیبانی کنید طول عمر (سال) | EOL |
---|---|---|---|
android-4.19-stable | 2018-10-22 | 6 | 01-01-2025 |
android11-5.4 | 2019-11-24 | 6 | 01-01-2026 |
اندروید 12-5.4 | 2019-11-24 | 6 | 01-01-2026 |
android12-5.10 | 13-12-2020 | 6 | 01-07-2027 |
android13-5.10 | 13-12-2020 | 6 | 01-07-2027 |
android13-5.15 | 2021-10-31 | 6 | 01-07-2028 |
android14-5.15 | 2021-10-31 | 6 | 01-07-2028 |
اندروید 14-6.1 | 11-12-2022 | 6 | 01-07-2029 |
اندروید 15-6.6 | 29-10-2023 | 4 | 01-07-2028 |
آزمایش هسته رایج
هسته های رایج علاوه بر تست پایین دستی توسط فروشندگان، با چندین سیستم 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 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-stable | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
به هسته های رایج اندروید کمک کنید
به طور کلی، توسعه ویژگی ها باید در لینوکس خط اصلی انجام شود و نه بر روی هسته های رایج اندروید. توسعه بالادستی به شدت تشویق می شود، و پس از پذیرش توسعه در آنجا، می توان آن را به راحتی در صورت نیاز به شعبه ACK خاص بکپورت کرد. تیم Android Kernel خوشحال است که از تلاشهای بالادستی به نفع اکوسیستم اندروید پشتیبانی میکند.
وصله ها را به Gerrit ارسال کنید و با این دستورالعمل های مشارکت مطابقت دهید.