חשוב מאוד לשמור על ממשק יציב של מודול ליבת המערכת (KMI) עבור מודולים של ספקים. ליבת ה-GKI נבנית ונשלחת בפורמט בינארי, ומודולים שאפשר לטעון מהספק נבנים בעץ נפרד. הקרנל של GKI ומודולי הספק שמתקבלים צריכים לפעול כאילו הם נוצרו יחד.
באופן כללי, קהילת Linux לא תומכת ברעיון של יציבות ABI בתוך ליבת המערכת עבור ליבת המערכת הראשית. בגלל שרשרות כלים שונות, הגדרות וליבת Linux mainline שמתפתחת כל הזמן, אי אפשר לשמור על KMI יציב ב-mainline. עם זאת, אפשר לשמור על KMI יציב בסביבת GKI מוגבלת מאוד עם האילוצים הבאים:
אפשר להשתמש רק במערך הגדרות אישיות אחד,
gki_defconfig
, כדי לבנות את ליבת המערכת.ממשק ה-KMI יציב רק באותה גרסת LTS ובאותה גרסת Android של ליבת מערכת, כמו
android14-6.1
,android15-6.6
אוandroid16-6.12
.- לא נשמרת יציבות של KMI עבור
android-mainline
.
- לא נשמרת יציבות של KMI עבור
רק ערכת הכלים הספציפית של Clang שסופקה ב-AOSP והוגדרה לענף המתאים משמשת לבניית ליבה ומודולים.
רק סמלים שידוע שהמודולים משתמשים בהם, כפי שמצוין ברשימת הסמלים, נבדקים מבחינת יציבות ונחשבים לסמלי KMI.
- מכאן נובע שמודולים של ספקים חייבים להשתמש רק בסמלי KMI. האילוץ הזה נאכף על ידי טעינת מודולים שנכשלה אם נדרשים סמלים שאינם KMI.
אחרי שהסניף של KMI קפוא, אפשר לבצע שינויים אבל הם לא יכולים לשבור את KMI. מה כלול בשינויים?
- שינויים בהגדרות
- שינויים בקוד הליבה
- שינויים בשרשרת הכלים (כולל עדכונים)
שימוש בתהליך בנייה הרמטי ובערכת הכלים LLVM
תהליך ה-build ההרמטי מבטיח KMI יציב באמצעות מניפסטים של repo
ב-kernel/manifest
שמתארים באופן מלא את סביבת ה-build. לדוגמה, המאניפסט של android16-6.12
כולל את ערכת הכלים, את מערכת הבנייה ואת כל מה שנדרש לבניית ליבת Generic Kernel Image (GKI). הגדרת ה-build, בעיקר BUILD.bazel
, מוודאת שהכלים הכלולים ישמשו בצורה נכונה כדי ליצור תוצאות build עקביות.
שימוש בתהליך בנייה הרמטי מבטיח גם שהתיאור של ה-ABI עבור העץ יהיה עקבי, בין אם הוא נוצר על ידי Google (לדוגמה, gki/aarch64/abi.stg
עבור android16-6.12
) ובין אם הוא נוצר בעץ מקומי שכולל את מודולי הספק. הכלים ליצירה ולהשוואה של תיאור ה-ABI לממשק מודול הליבה (KMI) מסופקים גם הם כחלק ממאגר המידע שמתואר במניפסט.
שרשרת הכלים שמשמשת לבניית ליבת GKI צריכה להיות תואמת באופן מלא לשרשרת הכלים שמשמשת לבניית מודולים של ספקים. החל מ-Android 10, כל ליבות Android חייבות להיבנות עם ערכת כלים של LLVM. ב-GKI, שרשרת הכלים של LLVM שמשמשת ליצירת ליבות של מוצרים ומודולים של ספקים צריכה ליצור את אותו ABI כמו שרשרת הכלים של LLVM מ-AOSP, והשותפים צריכים לוודא שה-KMI תואם לליבת GKI. מומלץ מאוד להשתמש בכלי הבנייה שסופקו, כי הם מספקים את התאימות הטובה ביותר.
מה השלב הבא?
הוראות לבניית ליבת מערכת באמצעות תהליך בנייה הרמטי וערכת כלים של LLVM מופיעות במאמר בניית ליבות מערכת.
הוראות למעקב אחרי ABI ולפתרון בעיות מפורטות במאמר מעקב אחרי ABI של ליבת Android