כדי לצמצם את השטח של סמלים וסוגים שצריך לשמור על יציבות,
לליבת GKI יש יכולות להגביל את הסמלים המיוצאים רק לאלה
במודולים. למודולים שעברו הידור חיצוני, צריכה להיות לכם רשימה
של סמלים בשימוש כדי לאפשר ייצוא שלהם על ידי הליבה של GKI. לדוגמה,
סמלים שמשמשים את המודולים
דגי ים מאוחסנים
באזור
android/abi_gki_aarch64_virtual_device
.
הוספת יעד ליצירה של רשימת סמלים
רשימות הסמלים נוצרות על ידי היעד kernel_abi
. מוסיפים את היעד הזה
מכשיר BUILD.bazel
עם האפשרויות הבאות:
name
הוא צריך להיות בפורמט
<kernel_build>_abi
.kernel_build
צריך להכיל את שם היעד של
kernel_build
למכשיר.
אפשר גם להשתמש באפשרויות הבאות:
kernel_modules
רשימת היעדים למודולים מחוץ לעץ. אסור להגדיר מודולים בעץ ייכללו כאן. פרטים נוספים הכינו מודולים של עץ לחילוץ סמלים.
kmi_symbol_list_add_only
האפשרות הזו מונעת הסרה של סמלים שלא בשימוש. הסרת הסמלים מתבצעת רק מותר בשעות ספציפיות במהלך KMI ייצוב ואסור להשתמש בו כשה-KMI קפוא.
זה שימושי גם כאשר משתמשים באותה רשימת סמלים עבור מספר מכשירים. כך, המכשיר לא יסיר סמלים שמשמשים את מכשיר א' אבל לא את מכשיר ב'.
module_grouping
אם הערך
True
או לא צוין, הסמלים מקובצים לפי מודולים של ליבה (kernel) שמפנים לסמל. אחרת, רשימת הסמלים רשימה ממוינת של סמלים שמשמשת את כל מודולי הליבה.
צפייה common-Modules/virtual-device/BUILD.bazel לדוגמה:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
ראו גם
חומרי עזר
ביעד kernel_abi
ב-Kleaf.
הכנת מודולים של עץ לחילוץ סמלים
כדי להכין מודולים של עץ לחילוץ סמלים, צריך לרשום עץ ספציפי לספק
במאפיין module_outs
של היעד kernel_build
. צפייה
_VIRT_COMMON_MODULES
וגם
השימוש בו
כדוגמה. אין לכלול מודולים של GKI ברשימה הזו.
מגדירים את המודולים האלה unsigned, אחרת, יכול להיות שרשימת הסימנים תהיה ריקה. כדי לעשות זאת, מוסיפים את השורה הזו לליבה (kernel) מקטעי config:
# CONFIG_MODULE_SIG_ALL is not set
צפייה common-Modules/virtual-device/virtual_device_core.section למשל.
הוספת רשימת סמלי מכשירים ל-build של הליבה של המכשיר
מוסיפים את המאפיין kmi_symbol_list
ליעד kernel_build
שמוגדר ב
מכשיר BUILD.bazel
. שם רשימת הסמלים צריך להיות בפורמט של
//common:android/abi_gki_<arch>_<device>
צפייה
common-Modules/virtual-device/BUILD.bazel,
לדוגמה:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
יצירה ושליחה של רשימת סמלים ראשונית
אפשר ליצור רשימת סמלים ריקה ב-common/android/abi_gki_<arch>_<device>
. עבור
הדוגמה שמעל הפקודה תהיה:
touch common/android/abi_gki_aarch64_virtual_device
מוסיפים את הקובץ הזה ל-additional_kmi_symbol_lists
של גרסת ה-build הבסיסית של ליבת GKI. עבור
לדוגמה, //common:android/abi_gki_aarch64_virtual_device
מתווסף
קבוצת קבצים אחת (aarch64_additional_kmi_symbol_lists
), הוצהרה ב-
common/BUILD.bazel.
מעדכנים את רשימת הסמלים של המכשירים כך שתמלא את רשימת הסמלים החדשה. שולחים אותו למאגר הליבה של Android Common Kernel.
עדכון רשימת סמלים של מכשירים
כל סמלי הליבה של הליבה שמשמשים במודולים ב-module_outs
מתוך kernel_build
וגם
kernel_modules
מתוך kernel_abi
צריך להיכלל ברשימת הסמלים. מי יכול
לעשות זאת על ידי הרצת היעד kernel_abi
עם הערך _update_symbol_list
הסיומת לדוגמה, הפקודה הבאה מעדכנת את רשימת הסמלים עבור
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
שליחת עדכון של רשימת סמלים אל ACK
שליחת תיקון עם שינוי רשימת הסמלים Android נפוץ ליבה (kernel) להפוך את הסמלים החדשים לחלק מ-KMI.
הודעת ההצהרה צריכה לכלול רשימה של סמלים שנוספו או הוסרו. אפשר
לכתוב את הרשימה באופן ידני לעדכון של רשימת סמלים קטנה או להשתמש
דיווח אחד ($DIST_DIR/abi.report.short
) אחרי
עדכון ה-ABI של ההפניה
של מודל טרנספורמר.
בזמן עדכון ה-ABI של ההפניה ייצוג לפני שליחת עדכון של רשימת סמלים, הוא עשוי לבטל את השלבים שצריך להגיש מראש כדי שניתן יהיה לשלוח את השינוי מהר יותר. בכל מקרה, בוצעה בדיקה ועדכון לפי הצורך במהלך השליחה מראש.
גרסאות ישנות יותר (Android 12 ומטה)
אפשר להשתמש בכלי build_abi.sh
באופן הבא:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
בדוגמה הזו, build.config.device
חייב לכלול את אפשרויות ההגדרה הבאות:
vmlinux
חייב להשתייך לרשימה
FILES
. כדי לעשות את זה, צריך לכלולbuild.config.aarch64
KMI_SYMBOL_LIST
יש להגדיר ולכוון אותם לרשימת סמלי ה-KMI כדי לעדכן.
אחרי שמעדכנים את רשימת סמלי המכשירים, צריך לשקף את השינויים האלה גם
גרסת ה-build של GKI (common/build.config.gki.aarch64
):
מעתיקים את רשימת הסמלים המעודכנת אל
common/android/abi_gki_aarch64_<device>
.בודקים ש-
android/abi_gki_aarch64_<device>
כלולADDITIONAL_KMI_SYMBOL_LISTS
באפליקצייתcommon/build.config.gki.aarch64
.