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

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

מה השלב הבא?

  • הוראות לפיתוח הליבה באמצעות תהליך build אטום ו-LLVM toolchain מפורטות במאמר פיתוח ליבות.

  • הוראות למעקב אחרי ה-ABI ולפתרון בעיות זמינות במאמר Android Kernel ABI Monitoring