ליבות נפוצות ב-Android

ליבות נפוצות ב-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.

יצירת ליבות (kernel) נפוצות מליבה (kernel) של android-mainline

איור 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.

6.6 מחזור חיים בהסתעפות ACK KMI

איור 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
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

תמיכה בטווחי חיים ובתיקונים לפגיעויות באבטחה

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
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

תרומה לליבה (kernel) נפוצה של Android

באופן כללי, פיתוח תכונות צריך להתבצע בגרסה הראשית של Linux ולא ליבות נפוצות של Android אנחנו ממליצים מאוד על פיתוח ב-upstream. של ה-ACK הספציפי, הסתעפות לפי הצורך. צוות הליבה של Android אשמח לתמוך במאמצים האלה לתועלת הסביבה העסקית של Android.

שליחת תיקונים ל-Gerrit ולעמוד בדרישות האלה הנחיות להוספת תוכן