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

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

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

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

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

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

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

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

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

השתמש בתהליך הבנייה הרמטי ובשרשרת הכלים של LLVM

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

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

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

מה הלאה?

  • להנחיות לבניית הליבה באמצעות תהליך הבנייה הרמטי ושרשרת הכלים של LLVM, עיין ב- Build kernels .

  • להנחיות כיצד לנטר את ה-ABI ולתקן בעיות, עיין ב- Android Kernel ABI Monitoring