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

יש שני סוגים של מודולים של ליבה: מודולים של 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.