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

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

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

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

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

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

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

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

    • שינויים בתצורה
    • שינויים בקוד הליבה
    • שינויים בכלי הפיתוח (כולל עדכונים)

שימוש בתהליך build אטום וב-toolchain של LLVM

תהליך ה-build האטום מבטיח יציבות של KMI באמצעות מניפסטים של repo ב-kernel/manifest שמתארים באופן מלא את סביבת ה-build. לדוגמה, המניפסט של android13-5.15 כולל את כלי הפיתוח, סקריפטים ל-build וכל מה שדרוש כדי ליצור את הליבה של Generic Kernel Image‏ (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 מ-AOSP, והשותפים צריכים לוודא שה-KMI תואם לליבה של GKI. מומלץ מאוד להשתמש בכלי ה-build שסופקו, כי הם מספקים את התאימות הטובה ביותר.

מה השלב הבא?