סקירה כללית על מודולים של ליבה

יש שני סוגים של מודולים של ליבת מערכת ההפעלה: מודולי GKI שלא תלויים בחומרה ומודולים של ספקים שספציפיים לחומרה. בדף הזה מופיעה סקירה כללית על שני סוגי המודולים.

מודולים של GKI

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

מודולים של GKI מספקים גם מנגנון שמאפשר לספקים לשלב תכונות חדשות של upstream אחרי אבן הדרך של הקפאת KMI. אי אפשר להחליף קוד מובנה בלי ליצור תמונה אחרת, אבל אפשר להחליף קוד שמועבר כמודול במודול אחר.

מודולי GKI משתמשים בתשתית החתימה של הליבה בזמן הבנייה כדי להבדיל בין GKI לבין מודולים אחרים בזמן הריצה. מותר לטעון מודולים לא חתומים, כל עוד הם משתמשים רק בסמלים שמופיעים ברשימת ההיתרים או שסופקו על ידי מודולים לא חתומים אחרים.

יש שני סוגים לוגיים של מודולי GKI: ‏ protected GKI module ו-unprotected GKI module.

מודול GKI מוגן

מודול GKI מוגן מסופק על ידי Google, אין לו הגבלות כלשהן והוא מתנהג כאילו הוא נוצר עם הליבה אחרי הטעינה. בנוסף, למודולי GKI מוגנים יש את המאפיינים הבאים:

  • למודולי GKI מוגנים יש גישה לסמלי ליבה שאינם KMI, שלא זמינים למודולי ספקים או למודולי GKI לא מוגנים.
  • מודולים מוגנים של GKI יכולים לייצא סמלים שהופכים לחלק מממשק ה-KMI, כל עוד הסמלים האלה מצוטטים ברשימת סמלים.
  • אי אפשר לבטל את ההגדרה של מודולי GKI מוגנים באמצעות מודולים של ספקים.

מודול GKI מוגן הוא סוג ברירת המחדל של מודולי GKI. כל מודולי ה-GKI נחשבים מוגנים בזמן ההקפאה של KMI.

מודול GKI לא מוגן

ספק יכול להחליף מודול GKI לא מוגן. אחרי הקפאת KMI, יכול להיות שמודול GKI מוגן יסווג מחדש כלא מוגן אם צוות GKI יחליט שהספקים צריכים לבטל את ההטמעה שמוגדרת כברירת מחדל עם גרסה שכוללת תכונות חדשות מ-upstream Linux. בגרסת GKI הבאה, מודולים לא מוגנים מסווגים מחדש כמוגנים אחרי שהקוד של upstream נכנס ל-Android Common Kernel ‏ (ACK). מודולים של GKI לא מוגנים מאופיינים בתכונות הבאות:

  • למודולי GKI לא מוגנים יש גישה לאותם סמלים מיוצאים כמו למודולים של ספקים.
  • מודולי GKI לא מוגנים לא יכולים לייצא סמלים שמיוצאים על ידי מודולי GKI מוגנים.
  • מודולים של GKI שלא מוגנים צריכים לשמור על כל ממשקי ה-KMI כאילו הם חלק מליבת הקרנל.
  • יכול להיות שמודולים של ספקים יחליפו מודולים של GKI שלא מוגנים.

Vendor modules

מודול ספק מועבר על ידי שותפים כדי להטמיע יכולות ספציפיות ל-SoC ולמכשיר. כל מודול ליבת מערכת קיים שלא מסופק כחלק מליבת GKI יכול להיות מסופק כמודול ספק.

אחד מהיעדים העיקריים של פרויקט GKI הוא לצמצם את הקוד הספציפי לחומרה בקרנל הליבה, ולכן ספקים יכולים לצפות לכך שקרנל GKI לא יכלול מודולים שמנהלים בבירור את החומרה שלהם. לדוגמה, ספק בשם ABC Inc. יכול לצפות שההגדרות כמו CONFIG_ABC_SOC_SUPPORT לא יופעלו כמודולים מובנים או כמודולים שאפשר לטעון ב-GKI בלי תמיכה.

אם מנהל התקן או מסגרת של ליבת מערכת קיימים ב-ACK, אבל לא מסופקים כחלק מליבת GKI, ספקים יכולים לשנות את מנהל ההתקן ולספק אותו כמודול ספק. לא מומלץ לבצע שינויים כאלה במודולים שלא ספציפיים לספק, כי יכול להיות שהיכולות האלה יסופקו באמצעות ליבת GKI בגרסה עתידית. אם ליבת ה-GKI מכילה יכולות שמסופקות על ידי מודול ספק, מודול הספק לא ייטען. לדוגמה, המאפיין CONFIG_GREYBUS לא מוגדר ל-GKI ב-Android 11, ולכן ספקים יכולים לספק מודולים של ספקים ב-greybus. עם זאת, יכול להיות ש-CONFIG_GREYBUS יופעל כמודול או כחלק מ-GKI ב-Android 12, ובמקרה כזה מודולים של ספקים ב-greybus לא ייטענו. מומלץ להשתמש בגרסה של מנהלי התקנים שלא ספציפיים לספק אם הם מסופקים כמודולים של הספק.

אפשר להציג מודולים של ספקים בתמונה vendor או בתמונה vendor_boot. מודולים שנדרשים בשלב מוקדם בתהליך האתחול צריכים להיות ב-vendor_boot. יש עלות של זמן אתחול שקשורה לטעינת מודולים מ-vendor_boot.