ליבות נפוצות של AOSP (שנקראות גם ליבות נפוצות של Android או ACK) הן ליבה (kernels) של kernel.org, והן כוללות תיקונים מעניינים בקהילת Android שלא מוזגו לליבות ראשיות או לליבות נתמכות לטווח ארוך (LTS). התיקונים האלה יכולים לכלול:
- עדכונים והמלצה לגבי פונקציונליות upstream שנדרשת לתכונות ב-Android
- תכונות מוכנות למכשירי Android אבל עדיין בשלבי פיתוח
- תכונות של ספקים או OEM (יצרן ציוד מקורי) שמועילות לשותפים אחרים בסביבה העסקית
android-mainline
היא ענף הפיתוח העיקרי של תכונות ב-Android. השורה הראשית של Linux ממוזגת עם android-mainline
בכל פעם ש-Linus Torvalds מפרסם גרסה או מועמד להפצה. לפני 2019, הליבות הנפוצות של Android נוצרו על ידי שכפול ליבת ה-LTS שהוצהרה לאחרונה והוספת התיקונים הספציפיים ל-Android. התהליך השתנה ב-2019 להסתעפות הליבה המשותפת החדשה של Android מ-android-mainline
. המודל החדש הזה מונע את המאמץ המשמעותי להעביר קדימה את היציאות ולבדוק תיקונים ל-Android על ידי השגת אותה תוצאה באופן מצטבר. המודל android-mainline
עובר בדיקות שוטפות משמעותיות, כדי להבטיח ליבה (kernel) באיכות גבוהה מיום הפרסום שלו.
כשמצהירים על LTS חדש ב-upstream, הליבה המשותפת התואמת מסתעפת מ-android-mainline
. כך השותפים יוכלו להתחיל פרויקט לפני ההצהרה על גרסת ה-LTS, על ידי מיזוג מ-android-mainline
. אחרי שיוצרים את הסתעפות הליבה המשותפת החדשה, השותפים יכולים לשנות באופן חלק את מקור המיזוג להסתעפות החדשה.
הסתעפויות ליבה נפוצות אחרות מקבלות מיזוגים שוטפים מהליבה של ה-LTS שמשויכת אליה.
המיזוגים האלה בדרך כלל מבוצעים מיד אחרי פרסום גרסת ה-LTS. לדוגמה, כשפורסם גרסה 6.1.75 של Linux, הוא מוזג עם ליבה (kernel) משותפת של 6.1 (android14-6.1
). אנחנו ממליצים מאוד לשותפים לעדכן את הליבות שלהם כדי להישאר מעודכנים בכל הנוגע ל-LTS ולתיקוני באגים ספציפיים ל-Android.
הסתעפות הליבה של ACK KMI
לליבות של GKI יש ממשק ליבה יציב של מודול ליבה. ה-KMI מזוהה באופן ייחודי באמצעות גרסת הליבה והגרסה של פלטפורמת Android, כך שההסתעפויות נקראת ANDROID_RELEASE
-KERNEL_VERSION
. לדוגמה, הליבה 6.1 של GKI ל-Android 14 נקראת android14-6.1
. ב-Android 15 (AOSP ניסיוני) הופעלה הליבה של GKI android15-6.6
.
איך מוסיפים ומשיקים ליבה (kernels)
לפני Android 15 (AOSP ניסיוני), היה אפשר להשתמש בכל אחת משלוש הליבות האחרונות להפעלת המכשיר. החל מ-Android 15 (AOSP ניסיוני), ניתן להשתמש בשתי גרסאות הליבה האחרונות להפעלת המכשיר. הליבה של ההשקה ל-Android 15 (ב-AOSP) היא android15-6.6
ו-android14-6.1
.
מכיוון שלא נדרשים שדרוגי ליבה כשמעדכנים את גרסת הפלטפורמה, עדיין אפשר להשתמש בליבות (kernel) שחסרות בהן התכונות העדכניות לגרסת הפלטפורמה כדי להפעיל מכשירים. לכן אפשר להשתמש במכשירים בליבות שתוכננו ל-Android 14, כמו android14-6.1
, גם אחרי שמשדרגים את גרסת הפלטפורמה ל-Android 15 (AOSP).
גרסה של פלטפורמת Android | השקת ליבות | הליבה של התכונה |
---|---|---|
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.101
|
android14-6.1
android14-5.15
|
Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
|
android13-5.15
android13-5.10
|
Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.41
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 או שווה לה. לפרטים נוספים, ראו אובייקט ממשק ספק – התאמת הסתעפויות ליבה. |
היררכיית ליבה משותפת
הסתעפות מ-Android-mainline
הרמה העליונה של היררכיית הליבה המשותפת מוצגת באיור 1.
איור 1. יצירת ליבות (kernel) נפוצות מליבה (kernel) של android-mainline
שימו לב שליבה נפוצה חדשה של Android android14-6.1
הסתעפה מ-android-mainline
בשנת 2022. ב-2023, כשערוץ ה-LTS הבא הוכרז, android15-6.6
הסתעפות מ-android-mainline
.
כפי שמוצג באיור 1, כל גרסת ליבה יכולה להיות הבסיס לשתי ליבות של GKI.
לדוגמה, שתי הליבות של גרסה 5.15 הן android13-5.15
ו-android14-5.15
, ושתיהן הן ליבות (kernel) של מאפיין בגרסאות הפלטפורמה המתאימות. זה היה גם במקרה של 5.10; android12-5.10
נוצר בזמן ההצהרה על ה-LTS והסתעפות android13-5.10
מ-android12-5.10
בשלבי הליבה של תכונת הליבה באביב 2021, כדי לאפשר פיתוח של תכונות ל-Android 13. החל מגרסה 15 של Android (AOSP) (ב-2024), קיימת רק גרסת ליבה חדשה אחת של GKI לכל גרסת ליבה (אין ליבה (kernel) של android15-6.1
).
מחזור החיים של הסתעפות ACK KMI
מחזור החיים של הסתעפות KMI מוצג בהמשך באיור 2.
איור 2. 6.6 מחזור חיים בהסתעפות ACK KMI
כדי להבהיר את תהליך הפיתוח ואת מחזור החיים של ההסתעפות, איור 2 מתמקד בהסתעפויות KMI של ACK ל-6.6.
כל הסתעפות ACK KMI עוברת בין שלושה שלבים שמצוינים באיור 2 בצבעים שונים בכל הסתעפות. כפי שמוצג, LTS ממוזג באופן קבוע ללא קשר לשלב.
שלב הפיתוח
כשיוצרים אותה, הסתעפות ACK KMI נכנסת לשלב הפיתוח (מסומן כ-dev באיור 2), ופתוחה להוספת תכונות בגרסה הבאה של פלטפורמת Android. באיור 2, android15-6.6
נוצרה כשהוצהר ש-6.6 ליבה חדשה של LTS ב-upstream.
שלב הייצוב
כשמצהירים על כך שהסתעפות ACK KMI הושלמה, היא נכנסת לשלב הייצוב (מסומן בתווית יציב באיור 2). תכונות לשותפים ותיקוני באגים עדיין יתקבלו, אבל מעקב KMI מופעל כדי לזהות שינויים שמשפיעים על הממשק. בשלב הזה יתקבלו שינויים לכשלים KMI, וההגדרה של ה-KMI מתעדכנת בקצב מוגדר מראש (בדרך כלל כל שבועיים). פרטים על מעקב KMI מופיעים בסקירה הכללית על GKI.
שלב הקפאת KMI
לפני שגרסת פלטפורמה חדשה מועברת ל-AOSP, הסתעפות ACK KMI מוקפאת ונשארת מוקפאת כל עוד ההסתעפות. המשמעות היא ששינויים ב-KMI לא יתקבלו, אלא אם תזוהה בעיית אבטחה חמורה, שאי אפשר לצמצם בלי להשפיע על ה-KMI היציב. אם לא נדרש תיקון במכשירי Android, חלק מהתיקונים שמוזגו מ-LTS ישתנו או יושמטו, כדי למנוע תקלות ב-KMI.
כשמקפיאים הסתעפות 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, נשמרים תאימות לאחור למרחב המשתמשים, כדי שאפשר יהיה להשתמש בבטחה בליבה (kernel) של פלטפורמת Android שאיתה הופעל המכשיר. בדיקות רציפות בגרסאות קודמות מבטיחה שהתאימות תישמר. כך, באיור 2, ניתן להשתמש בליבה (kernel) של android15-6.6
במכשירים עם Android 15 (AOSP) ואילך. גרסת הפלטפורמה של Android תואמת גם לגרסאות קודמות, ולכן אפשר להשתמש בליבה (kernel) 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 צפויים להיות נדירים מאוד.
תאימות בין ליבה (kernel)
דרישות התאימות בין ליבות באותה משפחת LTS משתנות כבר בליבות (kernel) החדשות של GKI.
ליבות של GKI
הליבות של GKI שומרות על תאימות לאחור לכל הגרסאות של פלטפורמת Android שתומכות בגרסת הליבה. בנוסף, הגרסאות של פלטפורמת Android תואמות לאחור עם ליבות של GKI מגרסאות קודמות. כך אפשר להשתמש בבטחה בליבה (kernel) של android14-6.1
שפותחה ל-Android 14 (2023) במכשירים עם Android 15 (AOSP ניסיוני) (2024). התאימות מאומתת באמצעות בדיקות רציפות של VTS ו-CTS של ליבות GKI עם כל הגרסאות הנתמכות.
ה-KMI יציב כך שאפשר לעדכן את הליבה ללא צורך בבנייה מחדש של מודולים של ליבה בתמונת הספק.
לא נשמרת תאימות KMI בין ליבות שונות של GKI. כך, לדוגמה, אי אפשר להחליף ליבה (kernel) של android14-6.1
בליבה (kernel) של android15-6.6
בלי לבנות מחדש את כל המודולים.
יש תמיכה בליבות של GKI רק בגרסאות הראשוניות והעוקבות שלהן.
הם לא נתמכים בגרסאות ישנות יותר. לכן, בליבה (kernel) של android15-6.6
אין תמיכה ב-devs עם Android 14 (2023).
מטריצת תאימות
בטבלה הזו מוצגות גרסאות הליבה שנתמכות ונבדקו בכל גרסה של פלטפורמת Android.
גרסה של פלטפורמת Android | ליבות (kernel) נתמכות לשדרוג | ליבות (kernel) נתמכות להשקה |
---|---|---|
Android 15 (AOSP ניסיוני) (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
|
תמיכה בטווחי חיים ובתיקונים לפגיעויות באבטחה
יש תמיכה בליבות נפוצות ב-Android עד שהתמיכה בליבת ה-LTS המשויכת או בגרסה של פלטפורמת Android תופסק. למרות שיש תמיכה בליבה, היא ממשיכה לקבל מיזוגי LTS מ-upstream ותיקוני באגים בקוד ספציפי ל-Android. התיקונים האלה כוללים את כל תיקוני האבטחה בליבה (kernel) שצוינו בחדשות האבטחה של Android החודשיות, שרלוונטיים לליבות הנפוצות של Android.
השותפים יכולים להיות בטוחים שבאמצעות שימוש בליבות של GKI, הם מקבלים את כל תיקוני האבטחה האפשריים בליבה (kernel) שאפשר.
בדיקת ליבה נפוצה
הליבות הנפוצות נבדקות באמצעות כמה מערכות CI, נוסף על בדיקות downstream על ידי ספקים.
בדיקת פונקציונליות הליבה של Linux
בדיקות הליבה של Linux (LKFT) מתחילות חבילות בדיקה שונות, כולל kselftest, LTP, VTS ו-CTS, בקבוצה של מכשירי Arm32 ו-arm64. תוצאות הבדיקה האחרונות זמינות כאן.
בדיקת KernelCI
בדיקות בנייה ואתחול של KernelCI מתחילות בכל פעם שתיקון חדש מחויב להסתעפות ליבה משותפת. כמה מאות הגדרות build נבדקות ומפעילות בלוחות שונים. כאן אפשר למצוא תוצאות עדכניות לגבי ליבה (kernel) של Android.
בדיקות ב-Android בשליחה מראש ובאחר-שליחה
בדיקות הגשה מראש משמשות כדי למנוע כשלים בליבה (kernel) הנפוצות של Android. הסיכום של תוצאת הבדיקה מופיע בכרטיסייה 'בדיקות' של שינוי הקוד ב-Grerit נפוץ ב-Android.
בדיקות לאחר שליחה ב-Android מתבצעות בגרסאות build חדשות שפורסמו בהסתעפויות ליבה נפוצות של Android כשתיקונים חדשים מחויבים להסתעפות ליבה (kernel) נפוצה של Android ב-ci.android.com. אם מזינים את aosp_kernel
בתור שם הסתעפות חלקי ב-ci.android.com, תוצג רשימה של הסתעפויות ליבה (kernel) עם תוצאות זמינות. לדוגמה, התוצאות של android-mainline
מופיעות כאן. כשלוחצים על build מסוים, סטטוס הבדיקה מופיע בכרטיסייה Test Results
.
הבדיקות שהוגדרו על ידי מיפוי בדיקות עם קבוצת הבדיקה kernel-presubmit
בעץ המקור של פלטפורמת Android ירוצו כשליחה מראש עבור הסתעפויות הליבה של Android. לדוגמה, ההגדרה הבאה ב-test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING תפעיל את vts_kernel_proc_file_api_test כבדיקת presbumit בשלב צ'ק אין נפוץ של קוד ליבה (kernel) של Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
בדיקה ב-0 ימים
בבדיקות 0 ימים מתבצעות בדיקות תיקונים לכל תיקון בכל הסתעפויות הליבה (kernel) הנפוצות של Android, כשמתבצעים תיקונים חדשים. מתבצעות בדיקות שונות של הפעלה, פונקציונליות וביצועים. מצטרפים לקבוצה הציבורית cros-kernel-buildreports.
מטריצת בדיקה
ליבה (kernel) נפוצה של Android | גרסאות של Android Platform | חבילות בדיקה | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
ראשי | 15 | 14 | 13 | 12 | 11 | 10 | LKFT | KernelCI | שליחה מוקדמת | פרסום פוסט | אפס ימים | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android5-6.6
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-stable
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
תרומה לליבה (kernel) נפוצה של Android
באופן כללי, פיתוח תכונות צריך להתבצע בגרסה הראשית של Linux, ולא בליבה (kernel) נפוצה של Android. אנחנו ממליצים מאוד על פיתוח ב-upstream, ואחרי שמקבלים את הפיתוח שם אפשר להעביר אותו בקלות לאחור להסתעפות הספציפית של ACK, לפי הצורך. צוות הליבה של Android שמח לתמוך במאמצי העלאה בסטרימינג לתועלת הסביבה העסקית של Android.
אפשר לשלוח תיקונים ל-Gerrit ולפעול בהתאם להנחיות האלה בנושא תרומות.