הפרויקט Generic Kernel Image (GKI).

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

בניית גרעין מוצר לפני GKI

איור 1. בניית גרעין מוצר לפני GKI.

  1. הליבה הנתמכת לטווח ארוך של לינוקס (LTS) מ-kernel.org שונתה עם תיקונים ספציפיים לאנדרואיד, וכתוצאה מכך גרמה ל- Android Common Kernel (ACK) .
  2. ה-ACK שונה על ידי ספקים שהוסיפו תמיכה עבור System-on-a-Chip (SoC). הספקים עשויים גם להוסיף אופטימיזציית ביצועים או צריכת חשמל. הליבה המתקבלת נקראת קרנל הספק .
  3. לבסוף, ליבת הספק שונתה עוד יותר על ידי יצרני OEM עם מנהלי התקנים נוספים והתאמות אישיות שלדעתם נחוצות. הגרעין שנוצר נקרא קרנל המוצר .

כל השינויים הללו יכולים לגרום לכך שעד 50% מקוד הליבה יהיה קוד מחוץ לעץ ולא מגרעיני Linux או ACKs במעלה הזרם. לפני GKI, כמעט לכל מכשיר היה ליבה מותאמת אישית שהביאה לפיצול ליבה.

עלויות הפיצול

לפיצול ליבה יש כמה השפעות שליליות על קהילת אנדרואיד.

עדכוני אבטחה דורשים עבודה

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

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

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

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

מעכב שדרוגי שחרור של פלטפורמת אנדרואיד

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

קשה לתרום שינויים בקרנל בחזרה ללינוקס במעלה הזרם

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

השהיה הארוך הזה בין שחרור ליבה במעלה הזרם למוצרים מקשה על קהילת אנדרואיד להזין תכונות ודרייברים נחוצים לתוך הגרעינים במעלה הזרם.

תיקון הפרגמנטציה: תמונת ליבה כללית

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

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

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

GKI הוא שינוי מורכב שהתגלגל בכמה שלבים החל מהגרעין של v5.4 במהדורת פלטפורמת אנדרואיד 11.

ישנם כרגע שני שלבי GKI:

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

GKI 1.0

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

  • הימנע רגרסיות ב- Vendor Test Suite (VTS) או Compatibility Test Suite (CTS) בעת החלפת ליבת המוצר בליבת GKI.
  • צמצם את עומס השותפים בשמירה על הליבה שלהם מעודכנת עם הגרעינים הנפוצים של AOSP.
  • כלול שינויי ליבה של אנדרואיד בקרנלים עבור מכשירים המשדרגים והשקה עם מהדורות אנדרואיד חדשות.
  • אל תשבור את מרחב המשתמש של אנדרואיד.
  • הפרד רכיבים ספציפיים לחומרה מקרנל הליבה כמודולים הניתנים לטעינה.

לתיעוד GKI 1.0, עיין בסעיף GKI 1.0 .

GKI 2.0

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

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

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