כדי לצמצם את פני השטח של סמלים וסוגים שצריכים להישמר כיציבים, לגרעין GKI יש פונקציונליות להגביל את הסמלים המיוצאים רק לאלה הדרושים למודולים. עבור מודולים מהידור חיצוני, עליך להצטייד ברשימה של סמלים בשימוש כדי לאפשר ייצוא שלהם על ידי ליבת GKI. לדוגמה, סמלים המשמשים מודולים עבור Cuttlefish מאוחסנים ב- 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
או לא מצוין, אז רשימת הסמלים תקבץ סמלים על סמך מודולי הליבה המתייחסים לסמל. אחרת רשימת הסמלים תהיה פשוט רשימה ממוינת של סמלים המשמשים את כל מודולי הליבה.
ראה מודולים משותפים/מכשיר וירטואלי/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
target ב-Kleaf.
הכן מודולים בתוך העץ לחילוץ סמלים
כדי להכין מודולים בתוך העץ לחילוץ סמלים, רשום מודולים בעץ ספציפיים לספק בתכונה module_outs
של יעד kernel_build
. ראה _VIRT_COMMON_MODULES
והשימוש בהם לדוגמא. אל תכלול מודולי GKI ברשימה זו.
הגדר את המודולים האלה כך שלא יהיו חתומים , אחרת רשימת הסמלים עלולה להיות ריקה. כדי לעשות זאת, הוסף את השורה הזו לשברי תצורת הליבה שלך:
# CONFIG_MODULE_SIG_ALL is not set
ראה למשל מודולים משותפים/וירטואלי-מכשיר/וירטואלי_התקן_קורה.fragment .
הוסף רשימת סמלים של מכשירים לבניית ליבת המכשיר
הוסף את התכונה 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
של בניית ליבת 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 Common Kernel gerrit כדי להפוך את הסמלים החדשים לחלק מה-KMI.
הודעת ההתחייבות צריכה לכלול רשימה של סמלים שנוספו או הוסרו. אתה יכול לכתוב רשימה זו באופן ידני לעדכון רשימת סמלים קטנה או להשתמש בדוח $DIST_DIR/abi.report.short
לאחר עדכון ייצוג ה-ABI הייחוס .
אמנם אין צורך בעדכון ייצוג ה-ABI של הפניה לפני שליחת עדכון רשימת סמלים, אך הוא עשוי לבטל שלבי הגשה מוקדמת נוספים ולהפוך את השינוי מוכן להגשה מהר יותר. בכל מקרה, הוא ייבדק ויעודכן במידת הצורך במהלך ההגשה המוקדמת.
גרסאות ישנות יותר (אנדרואיד 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 כדי לעדכן.
לאחר עדכון רשימת סמלי המכשירים, עליך לשקף גם את השינויים האלה ב-GKI build ( 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
.