סקירה כללית של הליבה

הליבה של Android מבוססת על ליבה של Linux עם תמיכה לטווח ארוך (LTS). ב-Google, ליבות LTS משולבות עם תיקונים ספציפיים ל-Android כדי ליצור את מה שנקרא Android Common Kernels‏ (ACKs).

גרסאות חדשות יותר של ACK (גרסה 5.4 ואילך) נקראות גם ליבות GKI. ליבות GKI תומכות בהפרדה בין הקוד של ליבת הליבה הגנרית לבין מודולי GKI, שלא תלויים בחומרה, לבין מודולי הספק, שספציפיים לחומרה.

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

הארכיטקטורה של GKI
איור 1. הארכיטקטורה של GKI

מילון מונחים בנושא ליבה

הקטע הזה מכיל מונחים שמופיעים במסמכי העזרה של הליבה.

סוגי ליבות

Android Common Kernel‏ (ACK)
ליבה שנמצאת במורד הזרם של ליבה עם תמיכה לטווח ארוך (LTS), וכוללת תיקונים שעניינים לקהילה של Android ולא מוזגו לליבת Linux הראשית או לליבות עם תמיכה לטווח ארוך (LTS). גרסאות ACK חדשות יותר (גרסה 5.4 ואילך) נקראות גם ליבות GKI, כי הן תומכות בהפרדה בין קוד ליבה גנרי (Generic Kernel) שלא תלוי בחומרה לבין מודולים של GKI שלא תלויים בחומרה.
ליבה של פרויקט קוד פתוח של Android‏ (AOSP)
מידע נוסף זמין במאמר Android Common Kernel.
ליבה של תכונה
ליבה שבה מובטחת ההטמעה של תכונות הגרסה של הפלטפורמה. לדוגמה, ב-Android 12, שני הליבות של התכונות היו android12-5.4 ו-android12-5.10. אי אפשר להעביר תכונות של Android 12 לליבת 4.19. קבוצת התכונות תהיה דומה למכשיר שהושקה עם ליבת 4.19 ב-Android 11 ושודרג ל-Android 12.
ליבה גנרית של הליבה
החלק של ליבת GKI שמשותף לכל המכשירים.
ליבה של Generic Kernel Image‏ (GKI)
כל ליבה של ACK בגרסה חדשה יותר (5.4 ואילך) (כרגע רק aarch64). הליבה מורכבת משני חלקים: הליבה המרכזית של GKI עם קוד שמשותף לכל המכשירים, ומודולים של GKI שפותחו על ידי Google ואפשר לטעון אותם באופן דינמי במכשירים הרלוונטיים.
ליבה של Kernel Module Interface‏ (KMI)
מידע נוסף זמין במאמר ליבת GKI.
הפעלת הליבה
ליבה שתקפה להפעלת מכשיר בגרסה מסוימת של פלטפורמת Android. לדוגמה, ב-Android 12, הליבות התקינות להשקה היו 4.19,‏ 5.4 ו-5.10.
ליבה עם תמיכה לטווח ארוך (LTS)
ליבה של Linux עם תמיכה למשך 2 עד 6 שנים. ליבונים של LTS פורסמו פעם בשנה והם הבסיס לכל אחד מ-ACKs של Google.

סוגי ענפים

ההסתעפות של הליבה של ACK KMI
הענף שבו נוצרים ליבוני GKI. לדוגמה, android12-5.10 ו-android13-5.15.
Android-mainline
הסתעפות הפיתוח הראשית של תכונות Android. כשמכריזים על ליבה חדשה של LTS ב-upstream, הליבה החדשה של GKI המתאימה מתפצלת מ-android-mainline.
Linux mainline
הסתעפות הפיתוח הראשית של ליבות Linux ב-upstream, כולל ליבות LTS.

תנאים אחרים

קובץ אימג' מאושר לאתחול
הליבה נשלחת בפורמט בינארי (boot.img) ומתבצע לה אימייל במכשיר. התמונה הזו מאושרת במובן שהיא מכילה אישורים מוטמעים, כדי ש-Google תוכל לוודא שהמכשיר נשלח עם ליבה שאושרה על ידי Google.
מודול ליבה שניתן לטעינה באופן דינמי (DLKM)
מודול שאפשר לטעון באופן דינמי במהלך האתחול של המכשיר, בהתאם לצרכים של המכשיר. גם GKI וגם מודולים של ספקים הם סוגים של DLKM. רכיבי DLKM פורסמים בפורמט .ko, והם יכולים להיות מנהלי התקנים או לספק פונקציונליות אחרת של הליבה.
פרויקט GKI
פרויקט של Google שמטפל בפיצול הליבה על ידי הפרדת הפונקציונליות של הליבה העיקרית מתמיכה ספציפית ל-SoC וללוח של הספק, למודולים שניתן לטעינה.
Generic Kernel Image‏ (GKI)
קובץ אימג' של אתחול שאושר על ידי Google, שמכיל ליבה של GKI שנוצרה מעץ מקור של ACK ומתאים להעברה (flash) למחיצה של אתחול במכשיר Android.
KMI
ממשק בין ליבת GKI לבין מודולים של ספקים, שמאפשר לעדכן מודולים של ספקים בנפרד מליבה של GKI. הממשק הזה מורכב מפונקציות של הליבה ומנתונים גלובליים שזוהו כיחסי תלות של ספקים או יצרני ציוד מקורי באמצעות רשימות סמלים לכל שותף.
מודולים של GKI
מודולים של ליבה שנוצרו על ידי Google ואפשר לטעון אותם באופן דינמי במכשירים הרלוונטיים. המודולים האלה נוצרים כפריטי ליבת GKI, ונשלחים לצד GKI כארכיון system_dlkm_staging_archive.tar.gz. Google חותמת על מודולי GKI באמצעות צמד המפתחות של הליבה בזמן ה-build, והם תואמים רק לליבה של GKI שבה הם נוצרו.
מודול הספק
מודול ספציפי לחומרה שפותח על ידי שותף, ומכיל פונקציונליות ספציפית למכשיר ול-SoC. מודול של ספק הוא סוג של מודול ליבה שניתן לטעינה באופן דינמי.

מה השלב הבא?

  • אם זו הפעם הראשונה שאתם מפתחים ליבה של Android, כדאי לכם להתחיל בקריאת המאמרים הבאים:
  • אם זו הפעם הראשונה שאתם מפתחים ליבה של GKI, כדאי להתחיל בקריאת המאמר פיתוח GKI.