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

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

מודולים של GKI

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

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

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

יש שני סוגים לוגיים של מודולים של GKI: מודול GKI מוגן ומודול GKI לא מוגן.

מודול GKI מוגן

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

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

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

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

אפשר לשנות מודול GKI לא מוגן באמצעות מודול של ספק. אחרי הקפאת KMI, ייתכן שמודול GKI מוגן יסווג מחדש כלא מוגן אם צוות GKI יחליט שהספקים צריכים לשנות את הטמעת ברירת המחדל לגרסה שכוללת תכונות חדשות מ-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.