כיצד לעבוד עם רשימות סמלים

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

  • שלח עדכון לרשימת הסמלים ל-ACK .