שמירה על ממשק יציב של מודול ליבה

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

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

  • ניתן להשתמש רק בתצורה אחת, gki_defconfig, כדי ליצור את של הליבה.

  • ה-KMI יציב רק באותה גרסת LTS ו-Android של ליבה, כמו android13-5.10, android12-5.10 או android13-5.15.

    • לא נשמר יציבות ב-KMI עבור android-mainline.
  • רק ה-toolchain הספציפי Clang שסופק ב-AOSP ומוגדר בשביל ההסתעפות המתאימה משמשת לבניית ליבה ומודולים.

  • רק סמלים שידועים במודולים, כפי שמצוין ברשימת סמלים, מנוטר לצורך היציבות, ונחשב לסמלי KMI.

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

    • שינויים בהגדרות
    • שינויים בקוד הליבה
    • שינויים במערכת הכלים (כולל עדכונים)

שימוש בתהליך ה-build הרמטי ובצרור הכלים של LLVM

תהליך ה-build הרמטי מבטיח KMI יציב באמצעות מניפסטים של repo kernel/manifest תיאור מלא של סביבת ה-build. לדוגמה, מניפסט של android13-5.15 כולל את 'צרור הכלים', 'בניית סקריפטים' ואת כל מה שצריך כדי לבנות ליבה (kernel) של תמונת ליבה (GKI) גנרית. ההגדרות האישיות של build.config כמו תצורת ה-build של GKI build.config.gki.aarch64, לוודא שנעשה שימוש נכון בכלים הכלולים כדי ליצור build עקבי תוצאות.

השימוש בתהליך build הרמטי מבטיח גם שתיאור ה-ABI של העץ הזה עקבי גם אם הוא נוצר על ידי Google (לדוגמה, abi_gki_aarch64.xml עבור android13-5.15) או שנוצרו בעץ מקומי שכולל את הספק מודולים. כלים ליצירה ולהשוואה של תיאור ממשק ABI גם הממשק של מודול הליבה (KMI) זמין כחלק מהמאגר שמתוארת במניפסט.

שרשרת הכלים שמשמשת לבניית הליבה של GKI חייבת להיות תואמת לחלוטין צרור הכלים שמשמש לבניית מודולים של ספקים. נכון ל-Android 10, כל הליבה של Android צריכה להיות בנויה באמצעות שרשור כלים מסוג LLVM. באמצעות GKI, צרור הכלים של LLVM שמשמש לבניית המוצר הליבה ומודולים של ספקים חייבים ליצור את אותו ה-ABI כמו LLVM Toolchain AOSP והשותפים חייבים לוודא שה-KMI תואם לליבה (kernel) של GKI. מומלץ מאוד להשתמש בכלי ה-build שיסופקו, את התאימות הטובה ביותר.

מה השלב הבא?

  • לקבל הוראות לבניית הליבה באמצעות תהליך ה-build הרמטי LLVM Toolchain זמין במאמר יצירת ליבות.

  • לקבלת הוראות למעקב אחרי ה-ABI ופתרון בעיות, אפשר לעיין במאמר מעקב ABI של Android ליבה