ליבות נפוצות ב-AOSP (שנקראות גם ליבה (kernel) נפוצה של Android או ACK) ליבה (kernel) של kernel.org וכוללת תיקונים מעוררות עניין בקהילת Android שלא מוזגו עם ראשי תיבות או ליבות (kernel) שנתמכות לטווח ארוך (LTS). התיקונים האלה יכולים לכלול:
- עדכונים ופיצ'רים נבחרים של פונקציונליות upstream שנדרשת ל-Android פיצ'רים
- תכונות מוכנות למכשירי Android אבל עדיין בשלבי פיתוח
- תכונות של ספקים או OEM (יצרן ציוד מקורי) שמועילות לשותפים אחרים בסביבה העסקית
android-mainline
היא ענף הפיתוח העיקרי של תכונות ב-Android. Linux
הראשי ממוזג ל-android-mainline
בכל פעם לינוס טורוולדס מפרסם
לשחרר או לשחרר מועמד. לפני 2019, הליבות הנפוצות של Android היו
נבנה על ידי שכפול ליבת ה-LTS שהוצהרה לאחרונה והוספת
תיקונים ספציפיים ל-Android. התהליך הזה השתנה בשנת 2019 להסתעפות של אפליקציית Android החדשה
ליבה (kernel) נפוצה מ-android-mainline
. המודל החדש הזה מונעת
לבצע העברה קדימה של השקע ולבדוק תיקונים של Android על ידי קבלת אותה תוצאה.
בהדרגה. android-mainline
עובר בדיקות מתמשכות משמעותיות,
מבטיח ליבה (kernel) באיכות גבוהה מיום הפרסום שלו.
כשמצהירים על LTS חדש ב-upstream, הליבה המשותפת התואמת מסתעפת
החל מ-android-mainline
. כך השותפים יכולים להתחיל פרויקט לפני
ההצהרה על גרסת ה-LTS, המוזג מ-android-mainline
. אחרי
הסתעפות ליבה משותפת חדשה נוצרת, השותפים יכולים לשנות את המיזוג בצורה חלקה
להסתעפות החדשה.
הסתעפויות ליבה (kernel) נפוצות אחרות מקבלות מיזוגים קבועים מהשיוך שלהן
ליבה (kernel) של LTS.
המיזוגים האלה בדרך כלל מבוצעים מיד אחרי פרסום גרסת ה-LTS. עבור
לדוגמה, כש-Linux 6.1.75 פורסם, הוא מוזג
ליבה (kernel) (android14-6.1
). אנחנו ממליצים לשותפים
לעדכן את הליבה שלהם כדי להישאר מעודכנים בכל מה שקשור ל-LTS ולתיקוני באגים ספציפיים ל-Android.
הסתעפות הליבה של ACK KMI
לליבות של GKI יש ממשק ליבה יציב של מודול ליבה. ה-KMI הוא
מזוהה באמצעות גרסת הליבה והגרסה של פלטפורמת Android, כך
לענפים יש שמות
ANDROID_RELEASE
-KERNEL_VERSION
לדוגמה, מודל GKI 6.1
הליבה של 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
.
כי לא נדרשים שדרוגי ליבה כשמעדכנים את הפלטפורמה
יש גרסאות ליבה (kernels) שחסרות בהן התכונות העדכניות בגרסת הפלטפורמה,
עדיין יכולים לשמש להפעלת מכשירים. לכן ליבות (kernels) שתוכננו עבור
אפשר להשתמש ב-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
,
ושניהם ליבות של מאפיינים בגרסאות הפלטפורמה המתאימות. הזה
היה המצב גם לגבי 5.10; android12-5.10
נוצר כשה-LTS
הוצהר ו-android13-5.10
הסתעפות מ-android12-5.10
בליבה (kernel)
ציון דרך הושלם באביב 2021 כדי לאפשר פיתוח של תכונות
Android מגרסה 13. מתחילים ב-Android
15 (AOSP ניסיוני) (2024), יש רק
ליבה חדשה אחת של GKI לכל גרסת ליבה (אין ליבה (kernel) של android15-6.1
).
מחזור החיים של הסתעפות ACK KMI
מחזור החיים של הסתעפות KMI מוצג בהמשך באיור 2.
איור 2. 6.6 מחזור חיים בהסתעפות ACK KMI
כדי להבהיר את תהליך הפיתוח ואת מחזור החיים בהסתעפות, איור 2 מתמקד סניפי ACK KMI ל-6.6.
כל הסתעפות ACK KMI עוברת בין שלושה שלבים שמצוין באיור 2: בצבעים שונים בכל הסתעפות. כמו שמוצג, ערוץ ה-LTS ממוזג באופן קבוע, ללא קשר של השלב.
שלב הפיתוח
כשיוצרים את הסתעפות KMI, הסתעפות ACK KMI נכנסת לשלב הפיתוח (כלומר
dev באיור 2), ופתוח להוספת תכונות למכשירי Android הבאים
מהדורת פלטפורמה. באיור 2, android15-6.6
נוצר כאשר 6.6
שהוצהרה בתור ליבה חדשה של ה-LTS ב-upstream.
שלב הייצוב
אחרי שהוצהר על כך שהתכונה ACK KMI הושלמה, היא מזינה את שלב הייצוב (מסומן בתווית יציב באיור 2). תכונות לשותפים וכן עדיין יתקבלו תיקוני באגים, אבל המעקב באמצעות KMI מופעל כדי לזהות שינויים. שמשפיעים על הממשק. בשלב הזה, מתקבלים שינויים לעקיפת KMI וההגדרה של ה-KMI מתעדכנת בקצב מוגדר מראש (בדרך כלל כל שני שבועות). לצפייה סקירה כללית של GKI עבור על מעקב KMI.
שלב הקפאת KMI
לפני שגרסת פלטפורמה חדשה מועברת ל-AOSP, הסתעפות ACK KMI מוקפאת. ונשאר קפוא כל עוד ההסתעפות. המשמעות היא שלא שינויים שמפר את KMI יתקבלו, אלא אם מזוהה בעיית אבטחה חמורה. שאי אפשר לצמצם את הסיכון בלי להשפיע על ה-KMI היציב. הימנעות מ-KMI תקלות, חלק מהתיקונים שמוזגו מ-LTS עשויים להשתנות או יושמטו אם התיקון יתוקן לא נדרשת במכשירי Android.
כשסניף ACK KMI קפוא, אפשר יהיה לאשר תיקוני באגים ותכונות של שותפים כל עוד הליבה (kernel) המשותפת של ה-KMI לא מנותקת. אפשר להאריך את KMI עם סמלים חדשים שיוצאו, כל עוד הממשקים שמרכיבים את מדד KMI הנוכחי לא יושפעו. כשמוסיפים ממשקים חדשים ל-KMI, הם מופיעים מיד יציבות ולא ניתן לשבור אותן על ידי שינויים עתידיים.
לדוגמה, שינוי שמוסיף שדה למבנה שמשמש את ממשק KMI ליבה רגילה (kernel) נפוצה אינה מותרת מפני שהיא משנה את הגדרת הממשק:
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, android15-6.6
ניתן להשתמש בליבה (kernel) במכשירים עם 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
ב-android15-6.6
ליבה (kernel) בלי לבנות מחדש את כל המודולים.
יש תמיכה בליבות של GKI רק בגרסאות הראשוניות והעוקבות שלהן.
הם לא נתמכים בגרסאות ישנות יותר. אז
אין תמיכה בליבה (kernel) של android15-6.6
להרצה של גורמים דיאקריטיים
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
|
תמיכה בטווחי חיים ובתיקונים לפגיעויות באבטחה
ACKs מקבלים מיזוגים של LTS מ-upstream ותיקוני באגים בקוד ספציפי ל-Android. התיקונים האלה כוללים את כל תיקוני האבטחה בליבה (kernel) שצוינו בסיכום החודשי של Android עדכוני אבטחה דחופים שרלוונטיים ל-ACK.
יכול להיות שיש תמיכה ב-ACKs למשך זמן ארוך יותר מהליבה היציבה המתאימה ב-upstream בכתובת kernel.org. במקרה הזה, Google מספקת תמיכה מורחבת עד לתאריך סיום החיים (EOL) שמוצג . כשהליבות (kernel) הן EOL, הן כבר לא שנתמכות על ידי Google והמכשירים שבהם הן מופעלות, נחשבות לפגיעות.
החל בליבה (kernel) 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 בנוסף למערכות downstream ואת הבדיקות שלהם על ידי ספקים.
בדיקת פונקציונליות הליבה של Linux
בדיקת פונקציונליות ליבה (Kernel) של Linux (LKFT) בדיקות מתחילות חבילות בדיקה שונות כולל kselftest , LTP , VTS ו-CTS קבוצת מכשירים פיזית עם Arm32 ו-arm64. ניתן למצוא את תוצאות הבדיקה האחרונות. כאן.
בדיקת KernelCI
בדיקות בנייה ואתחול של KernelCI מופעלת בכל פעם שתיקון חדש מחויב להסתעפות ליבה משותפת. כמה מאות תצורות build נבדקות ומופעלות בלוחות שונים. מהתקופה האחרונה ניתן למצוא תוצאות עבור הליבה של Android כאן.
בדיקות ב-Android בשליחה מראש ובאחר-שליחה
בדיקות שמוגשות מראש משמשות כדי למנוע כשלים ליבות נפוצות של Android הסיכום של תוצאות הבדיקה נמצא בקטע 'בדיקות' של שינוי הקוד בכרטיס הליבה (kernel) המשותפת של Android.
מתבצעות בדיקות לאחר השליחה ב-Android
על גרסאות build חדשות שפורסמו בהסתעפויות ליבה נפוצות של Android כאשר תיקונים חדשים מחויבים להסתעפות ליבה (kernel) נפוצה של Android ב-ci.android.com. על ידי הזנת
aosp_kernel
כשם הסתעפות חלקי ב-ci.android.com, מופיעה רשימה של הסתעפויות ליבה עם
התוצאות זמינות. לדוגמה, ניתן למצוא תוצאות עבור 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
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-stable
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
תרומה לליבה (kernel) נפוצה של Android
באופן כללי, פיתוח תכונות צריך להתבצע בגרסה הראשית של Linux ולא ליבות נפוצות של Android אנחנו ממליצים מאוד על פיתוח ב-upstream. של ה-ACK הספציפי, הסתעפות לפי הצורך. צוות הליבה של Android אשמח לתמוך במאמצים האלה לתועלת הסביבה העסקית של Android.
שליחת תיקונים ל-Gerrit ולעמוד בדרישות האלה הנחיות להוספת תוכן