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

יש שני סוגים של מודולים של ליבת מערכת ההפעלה: מודולי 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 שלא מוגנים.

מודולים של ספקים

מודול ספק מועבר על ידי שותפים כדי להטמיע יכולות ספציפיות ל-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.