ליבונים משותפים של AOSP (שנקראים גם ליבות משותפים של Android או ACKs) הם ליבות שמגיעים מ-downstream של ליבות kernel.org, וכוללים תיקונים שעניינים לקהילת Android ושעדיין לא מוזגו לליבות ראשיות או לליבות עם תמיכה לטווח ארוך (LTS). התיקונים האלה יכולים לכלול:
- גרסאות backport ותכונות נבחרות מקוד מקור שדרושות לתכונות של Android
- תכונות שזמינות במכשירי Android אבל עדיין בתהליך פיתוח ב-upstream
- תכונות של ספקים או OEM (יצרן ציוד מקורי) שמועילות לשותפים אחרים בסביבה העסקית
android-mainline
היא ההסתעפות הראשית של הפיתוח של תכונות Android. ההסתעפות הראשית של Linux מיזוגת ל-android-mainline
בכל פעם ש-Linus Torvalds מפרסם גרסה או גרסה מועמדת. לפני 2019, הליבה המשותפת של Android נוצרה על ידי יצירת עותקים מקודמים של הליבה של LTS שהוצהרה לאחרונה והוספת התיקונים הספציפיים ל-Android. התהליך הזה השתנה בשנת 2019 כדי ליצור את הליבה המשותפת החדשה של Android מ-android-mainline
. המודל החדש הזה מונע את המאמץ המשמעותי להעביר את היציאות ולבדוק תיקונים ל-Android על ידי השגת אותה תוצאה באופן מצטבר. android-mainline
עובר בדיקות מתמשכות משמעותיות, והמודל הזה מבטיח ליבת איכות גבוהה מהיום שבו היא מתפרסמת.
כשמכריזים על LTS חדש ב-upstream, הליבה המשותפת המתאימה מתפצלת מ-android-mainline
. כך השותפים יכולים להתחיל פרויקט לפני ההכרזה על גרסת LTS, על ידי מיזוג מ-android-mainline
. אחרי שיוצרים את ההסתעפות החדשה של הליבה המשותפת, השותפים יכולים לשנות את מקור המיזוג להסתעפות החדשה בצורה חלקה.
להסתעפויות נפוצות אחרות של הליבה מתבצעות מיזוגים קבועים מליבת ה-LTS המשויכת אליהן.
בדרך כלל, המיזוגים האלה מתבצעים מיד אחרי פרסום הגרסה ל-LTS. לדוגמה, כשפורסמה הגרסה Linux 6.1.75, היא מוזגה לליבת 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, הוצג הליבה GKI android15-6.6
.
תכונות והשקות של ליבות
לפני Android 15, אפשר היה להשתמש בכל אחד משלושת הליבות האחרונות להפעלת המכשיר. החל מ-Android 15, אפשר להשתמש בשתי הגרסאות האחרונות של הליבה להפעלת המכשיר. הליבות של Android 15 הן android15-6.6
ו-android14-6.1
.
מאחר ששדרוגי ליבה לא נדרשים כשמעדכנים את גרסת הפלטפורמה, עדיין אפשר להשתמש בליבות בלי התכונות העדכניות ביותר של גרסת הפלטפורמה כדי להשיק מכשירים. לכן, אפשר להשתמש בליבות שתוכננו ל-Android 14, כמו android14-6.1
, במכשירים גם אחרי שמשדרגים את גרסת הפלטפורמה ל-Android 15.
גרסה של פלטפורמת Android | השקת ליבות | ליבות של תכונות |
---|---|---|
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 או שווה לה. לפרטים נוספים, ראו אובייקט ממשק ספק – התאמת הסתעפויות ליבה. |
היררכיית ליבה נפוצה
הסתעפות מ-android-mainline
הרמה העליונה של היררכיית הליבה המשותפת מוצגת באיור 1.
איור 1. יצירת ליבות נפוצים מליבה של android-mainline
שימו לב שגרסת הליבה המשותפת החדשה של Android 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 לכל גרסת ליבה (אין ליבה (kernel) של android15-6.1
).
מחזור החיים של ההסתעפות ב-ACK KMI
מחזור החיים של הסתעפות KMI ב-ACK מוצג באיור 2 שבהמשך.
איור 2. מחזור החיים של ההסתעפות ב-ACK KMI בגרסה 6.6
כדי להבהיר את תהליך הפיתוח ומחזור החיים להסתעפות, איור 2 מתמקד בהסתעפויות KMI של ACK ל-6.6.
כל הסתעפות של ACK KMI עוברת דרך שלושה שלבים, שמצוינים בתרשים 2 באמצעות צבעים שונים בכל הסתעפות. כפי שמוצג, השילוב של LTS מתבצע באופן קבוע ללא קשר לשלב.
שלב הפיתוח
כשהוא נוצר, ההסתעפות של ACK KMI נכנסת לשלב הפיתוח (שסומן בתור dev באיור 2), והיא פתוחה לתרומות של תכונות לגרסה הבאה של פלטפורמת Android. באיור 2, השגיאה android15-6.6
נוצרה כשגרסת הליבה 6.6 הוכרזה כגרסת הליבה החדשה של LTS במקור.
שלב הייצוב
כשהתכונה מוגדרת כשלמה בהסתעפות KMI של ACK, היא נכנסת לשלב היציבות (שסומן בתווית stable באיור 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, מתבצעת שמירה על תאימות לאחור למרחב המשתמש, כדי שניתן יהיה להשתמש בליבה בבטחה בגרסה של פלטפורמת Android שבה המכשיר הושק. בדיקות רציפות בגרסאות קודמות מבטיחה שהתאימות תישמר. לכן, באיור 2 אפשר להשתמש בליבה android15-6.6
במכשירי Android מגרסה 15 ואילך. מכיוון שהגרסה של פלטפורמת Android תואמת גם לגרסאות קודמות, אפשר להשתמש בליבה 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 יש תאימות לאחור לכל הגרסאות של פלטפורמת Android שתומכות בגרסה של הליבה. בנוסף, הגרסאות של פלטפורמת Android תואמות לאחור לליבת GKI מגרסאות קודמות. כך אפשר להשתמש בבטחה בליבה (kernel) של android14-6.1
שפותחה ל-Android 14 (2023) במכשירים עם Android 15 (2024). התאימות מאומתת באמצעות בדיקות רציפות של VTS ו-CTS של ליבות GKI עם כל הגרסאות הנתמכות.
ה-KMI יציב, כך שאפשר לעדכן את הליבה בלי צורך בבנייה מחדש של מודולי הליבה בתמונת הספק.
התאימות של KMI לא נשמרת בין ליבות GKI שונות. לדוגמה, אי אפשר להחליף ליבה של android14-6.1
בליבה של android15-6.6
בלי לבנות מחדש את כל המודולים.
יש תמיכה בליבות של GKI רק בגרסה הראשונית ובגרסאות הבאות שלהן.
אין תמיכה בהן במהדורות ישנות יותר. לכן, אין תמיכה בליבה (kernel) של android15-6.6
במכשירים עם Android 14 (2023).
מטריצת תאימות
בטבלה הזו מפורטות גרסאות הליבה שנתמכות ונבדקות בכל גרסה של פלטפורמת Android.
גרסה לפלטפורמת Android | ליבות נתמכות לשדרוג | ליבות (kernel) נתמכות להשקה |
---|---|---|
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
|
תוחלת חיים ותיקוני אבטחה
ב-ACKs מתקבלים מיזוגים של LTS מ-upstream ותיקוני באגים לקוד שספציפי ל-Android. התיקונים האלה כוללים את כל תיקוני האבטחה של הליבה שצוינו בעדכוני האבטחה החודשיים של Android שרלוונטיים ל-ACK.
יכול להיות שתהיה תמיכה ב-ACKs למשך זמן ארוך יותר מאשר לליבת ה-upstream היציבה המתאימה ב-kernel.org. במקרה כזה, Google מספקת תמיכה מורחבת עד תאריך סיום חיי המוצר (EOL) שמוצג בקטע הזה. כשגרסאות הליבה מגיעות ל-EOL, Google מפסיקה לתמוך בהן והמכשירים שפועלות בהם נחשבים לנקודות חולשה.
החל מגרסה 6.6 של הליבה, משך החיים של התמיכה בליבות היציבות הוא 4 שנים.
בטבלה הבאה מוצגות תקופות החיים של הודעות ה-ACK הנתמכות:
הסתעפות ACK | תאריך ההשקה |
תמיכה לכל החיים (שנים) |
EOL |
---|---|---|---|
android-4.19-stable | 2018-10-22 | 6 | 2025-01-01 |
android11-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
בדיקת ליבה נפוצה
הליבות הנפוצות נבדקות בכמה מערכות CI, בנוסף לבדיקות של ספקים במורד הזרם.
בדיקה פונקציונלית של ליבה של Linux
בדיקות הליבה של Linux (LKFT) מתחילות חבילות בדיקה שונות, כולל kselftest, LTP, VTS ו-CTS, בקבוצה של מכשירים פיזיים 32 ומכשירי Arm64. תוצאות הבדיקה האחרונות זמינות כאן.
בדיקת KernelCI
בדיקות ה-build-and-boot של KernelCI מופעלות בכל פעם שמתבצע השמירה של תיקון חדש להסתעפות ליבה משותפת. מאות הגדרות build נבדקות ומופעל בהן אתחול בלוחות שונים. תוצאות עדכניות לגבי ליבות Android זמינות כאן.
בדיקות לפני שליחת בקשה לבדיקה ובדיקות לאחר שליחת בקשה לבדיקה ב-Android
בדיקות הגשה מראש משמשות כדי למנוע כשלים בליבה (kernel) הנפוצות של Android. סיכום תוצאות הבדיקה מופיע בכרטיסייה 'בדיקות' של שינוי הקוד ב-Android common kernel gerrit.
בדיקות של Android לאחר שליחת בקשה מתבצעות ב-builds חדשים שפורסמו בהסתעפויות ליבה נפוצות של Android, כשתיקונים חדשים מועברים להסתעפות ליבה נפוצה של Android ב-ci.android.com. כשמוסיפים את הערך aosp_kernel
כשם חלקי של ההסתעפות ב-ci.android.com, מוצגת רשימה של הסתעפויות ליבה עם תוצאות זמינות. לדוגמה, התוצאות של android-mainline
מופיעות כאן. כשלוחצים על build מסוים, סטטוס הבדיקה מופיע בכרטיסייה Test Results
.
הבדיקות שמוגדרות על ידי test-mapping עם קבוצת הבדיקות 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
מטריצת בדיקה
Android common kernel | גרסאות של פלטפורמת Android | חבילות בדיקה | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
ראשי | 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
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
תרומה לליבת Android
באופן כללי, פיתוח תכונות צריך להתבצע ב-Linux הראשי ולא בליבות נפוצות של Android. מומלץ מאוד לפתח את ה-upstream, ואחרי שהפיתוח מתקבל שם, אפשר להעביר אותו בקלות לאחור להסתעפות הספציפית של ACK, לפי הצורך. צוות הליבה של Android שמח לתמוך במאמצי העלאה בסטרימינג לתועלת הסביבה העסקית של Android.
שולחים תיקונים ל-Gerrit ופועלים בהתאם להנחיות לתרומות.