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

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

מודולים של GKI

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

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

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

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

מודול GKI מוגן

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

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

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

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