פרויקט תמונת ליבה גנרי (GKI)

ליבה של מוצר, שנקראת גם ליבה (kernel) של מכשיר או ליבה (kernel) של OEM, היא הליבה שאתם שולחים במכשיר. לפני GKI, הליבה של המוצר הייתה נגזר מסדרה של שינויים בליבה (kernel) ב-upstream. איור 1 מראה איך הליבה התוספות מניבות ליבה של מוצר (OEM/ליבה של מכשיר):

בניית ליבה (kernel) של מוצר טרום-GKI

איור 1. בניית ליבה (kernel) של מוצר טרום-GKI.

  1. בוצע שינוי בליבה (kernel) של Linux לטווח ארוך (LTS) מ-kernel.org עם תיקונים ספציפיים ל-Android שהתוצאה שלהם היא ליבה משותפת (ACK) של Android.
  2. ה-ACK שונה על ידי ספקים שהוסיפו תמיכה ב'מערכת על שבב' (ACK) שלהם (SoC). הספקים יכולים גם להוסיף ביצועים או אופטימיזציות של צריכת החשמל. הליבה שמתקבלת נקראת הליבה של הספק.
  3. לבסוף, יצרני ציוד מקורי שינו עוד יותר את הליבה של הספק, עם תוספות מנהלי התקנים והתאמות אישיות שהם סבורים שיש בהם צורך. הליבה שמתקבלת נקראת הליבה של המוצר.

כל השינויים האלה יכולים להוביל ל-50% קוד ליבה (kernel) הוא קוד מחוץ לעץ ולא מליבות או מ-ACK ב-upstream של Linux. לפני GKI, כמעט לכל מכשיר הייתה ליבה מותאמת אישית שהניבה ליבה (kernel) פרגמנטציה.

עלויות פרגמנטציה

לפיצול הליבה יש כמה השפעות שליליות על קהילת Android.

עדכוני אבטחה מצריכים מאמץ

תיקוני אבטחה שהוזכרו מבזק אבטחה של Android (ASB) להעביר לאחור כל אחת מהליבות של המכשיר. אבל בגלל הליבה פרגמנטציה, ההפצה של תיקוני אבטחה הרבה מאוד יקרה מכשירי Android בשדה.

קשה למזג עדכונים נתמכים לטווח ארוך

הגרסאות עם התמיכה לטווח ארוך (LTS) כוללות תיקוני אבטחה ועוד תיקוני באגים קריטיים. שמירה על עדכניות בגרסאות LTS היא מוכחת הדרך היעילה ביותר לספק תיקוני אבטחה. במכשירי Pixel, גילו ש-90% מבעיות אבטחת הליבה שדווחו ב-ASB כבר תוקן למכשירים מעודכנים.

עם זאת, לאחר כל השינויים בהתאמה אישית בליבות המכשיר, קשה פשוט למזג את התיקונים של ה-LTS לליבות במכשיר.

מניעת שדרוגי הגרסאות של פלטפורמת Android

הפילוח מקשה על תכונות חדשות ב-Android שמחייבות ליבה (kernel) שיתווספו למכשירים בשדה. יש להניח את הקוד של Android Framework תמיכה בעד 5 גרסאות ליבה (kernel) וללא שינוי ליבה נוצרו לגרסת הפלטפורמה החדשה (Android 10). תומך בליבות 3.18, 4.4, 4.9, 4.14 ו-4.19, שבמקרים מסוימים לא שופרו באמצעות תכונות חדשות מאז Android 8 ב-2017).

היה קשה להחזיר שינויים בליבה (kernel) חזרה ל-upstream ב-Linux

לאחר כל השינויים בליבה (kernel), רוב מכשירי הדגל נשלחים עם גרסת ליבה שכבר בת 18 חודשים לפחות. לדוגמה, ליבה 4.14 שוחררה על ידי kernel.org בנובמבר 2017 הטלפונים הראשונים עם מערכת Android שמשתמשים בליבות של 4.14 נשלחו באביב 2019.

העיכוב הארוך הזה בין שחרור ליבה (kernel) ב-upstream לבין המוצרים מקשה כדי שקהילת Android תוכל להזין תכונות ומניעים נחוצים ב-upstream של הליבה.

תיקון המקטע: תמונת ליבה גנרית

פרויקט תמונת הליבה הכללי (GKI) מטפל בפיצול הליבה לפי איחוד של ליבת הליבה והעברת תמיכה ב-SoC ובלוח מתוך הליבה למודולים של ספקים שאפשר לטעון. GKI גם מציג מודול ליבה יציב ממשק (KMI) למודולים של ספקים, כך שניתן לעדכן מודולים בליבה (kernel) באופן עצמאי. הנה כמה מאפיינים של הליבה של GKI:

  • הליבה של GKI מבוססת על מקורות ACK.
  • הליבה של GKI היא בינארית עם ליבה יחידה, בתוספת המודולים הנטענים המשויכים אליה לכל ארכיטקטורה, לכל גרסת LTS (כרגע רק Arm64 ל-android11-5.4 ו-android12-5.4).
  • הליבה של GKI נבדקת בכל הגרסאות של פלטפורמת Android שנתמך עבור ACK המשויך. אין הוצאה משימוש של תכונות כל משך החיים של GKI גרסת הליבה.
  • הליבה של GKI חושפת KMI יציב לנהגים ב-LTS נתון.
  • הליבה של GKI לא מכילה קוד ספציפי ל-SoC או ספציפי ללוח.

לתמונה של הארכיטקטורה של GKI, אתם יכולים לעיין סקירה כללית של הליבה

GKI הוא שינוי מורכב שהושק במספר שלבים, החל את הליבה של גרסה 5.4 בגרסת הפלטפורמה של Android 11.

קיימים שני שלבים ב-GKI:

  • GKI 1.0 הושק ב-Android 11 למכשירים עם 5.4 ליבות. GKI 1.0 חל על כל המכשירים עם 5.4 ליבות, כולל אלה הושקו ב-Android 12 או ב-Android 13.
  • GKI 2.0 הושק ב-Android 12 למכשירים עם 5.10 ליבות, וזהו התקן החדש לכל המכשירים ששולחים עם גרסת 5.10 או את הליבה מאוחר יותר.

GKI 1.0

ב-GKI 1.0, מכשירים שמופעלים עם גרסת ליבה (kernel) 5.4 חייבים לעבור בדיקת GKI (גרסאות פלטפורמה Android 11 ואילך). יעדי GKI 1.0 כוללים את אלה:

  • להימנע מרגרסיות בחבילת הבדיקה של הספק (VTS) או חבילה לבדיקת תאימות (CTS) כשמחליפים את הליבה של המוצר בליבה (kernel) של GKI.
  • הפחתת העומס על השותף להקפיד לעדכן את הליבה שלו באמצעות AOSP ליבות נפוצות.
  • הכללת שינויי ליבה של Android בליבות במכשירים שמשדרגים ומפעילים עם גרסאות חדשות של Android.
  • אסור לשבור את מרחב המשתמשים של Android.
  • הפרדה בין רכיבים ספציפיים לחומרה לליבה הליבה כמודולים נטענים.

למסמכי תיעוד של GKI 1.0, ניתן לעיין ב סעיף GKI 1.0.

GKI 2.0

ב-GKI 2.0, מכשירים שמופעלים עם גרסת ליבה (kernel) 5.10 ואילך חייבים להישלח עם הליבה של GKI (מתחילים ב-Android 12). הפעלה חתומה התמונות זמינות ומתעדכנות באופן קבוע באמצעות LTS ותיקוני באגים קריטיים. בגלל שהיציבות הבינארית נשמרת ב-KMI, אפשר להתקין את פעולות ההפעלה ללא שינוי בתמונות של הספק. יעדי GKI 2.0 כוללים הבאים:

  • אין לכלול רגרסיות משמעותיות או ביצועים משמעותיים בזמן ההחלפה הליבה של המוצר עם הליבה של GKI.
  • מתן הרשאה לשותפים לספק תיקוני אבטחת ליבה (kernel) ותיקוני באגים ללא הספק מעורבות פעילה.
  • מפחיתים את עלות העדכון של גרסת הליבה הראשית במכשירים (לדוגמה, מ-v5.10 לליבה (kernel) של LTS לשנת 2021.
  • לשמור על בינארי ליבה (kernel) אחת של GKI לכל ארכיטקטורה על ידי עדכון ליבה (kernel) עם תהליך ברור לשדרוג.

GKI 2.0 מייצג את המצב העדכני ביותר של הליבה של Android. Kernel תיעוד מחוץ ל-GKI 1.0 הליבות הקודמות ( <=4.19) משקפים את ארכיטקטורת GKI 2.0.