הפעלה של ניטור ממשק ABI

בדף הזה מוסבר איך לפתח ייצוגי ABI של ליבה של Android ולהריץ אותם מעקב ABI. רלוונטי ל-Android 14 ול-Android גבוהה יותר. לגרסאות נמוכות יותר: גרסאות ליבה (kernel) ישנות יותר.

ראו גם את מאמרי העזרה של Kleaf: תמיכה במעקב ABI (GKI) וגם תמיכה במעקב ABI (מכשיר).

פיתוח הליבה וייצוג ה-ABI שלה

אחרי ההורדה של מקורות GKI כדי לפתח את הליבה של GKI וארטיפקטים של ה-ABI, מריצים את הפקודה הבאה:

tools/bazel run //common:kernel_aarch64_abi_dist

הפקודה הזו יוצרת ייצוג ABI נוכחי ומעתיקה אותו out_abi/kernel_aarch64/dist/abi.stg יחד עם המודולים והליבה (kernel) והמודולים.

אפשר לציין ארגומנטים נוספים לכלי ה-ABI בסוף הפקודה אחרי --. לדוגמה, כדי לשנות יעד ל-ABI וליצור ארטיפקטים, יכול להשתמש באפשרות אחת (--dist_dir):

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

ניתוח ההבדלים בין ה-ABI בין ה-build לבין ייצוג של קובץ עזר

היעד //common:kernel_aarch64_abi_dist, שמופעל בפקודה שלמעלה, מנתח ומדווח על הבדלים ב-ABI בין ה-build לבין קובץ העזר שנמצא ב-common/android/abi_gki_aarch64.stg (מוגדר BUILD.bazel). ההבדלים האלה מודפסים בסוף ה-build, כמו שמוצג בדוגמה הבאה:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

הדוח המודפס מגיע מארטיפקט של ה-build שנמצא בכתובת out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short יחד עם דוחות ב- פורמטים אחרים.

האוטומציה צריכה להשתמש בקוד היציאה של פקודת ה-build, שאינו אפס אם הבדלים ביניהם.

שימו לב שלב הפיתוח להסתעפויות, כולל android-mainline, אין ייצוג ABI של הפניה. בלי נעילת מסך, //common:kernel_aarch64_abi_dist לא יזהה הבדלים.

עדכון ייצוג ה-ABI של ההפניה

כל שינוי שמשפיע על ה-ABI של הליבה, כמו עדכון של רשימת הסמלים, צריך לבוא לידי ביטוי בייצוג של ה-ABI. (common/android/abi_gki_aarch64.stg, מוגדר ב BUILD.bazel). כדי לעשות זאת, מריצים את הפקודה הבאה:

​​tools/bazel run //common:kernel_aarch64_abi_update

הפקודה הזו מבצעת את כל הפעולות בשלב לנתח את ההבדלים ב-ABI ולעדכן גם את וייצוג שלו במקורות. לאחר מכן אפשר להעלות את ה-ABI המעודכן אותה התחייבות לשינוי. לכלול את ההבדלים בין ה-ABI לדווח ב-$DIST_DIR/abi.report.short בהודעה שמופיעה.

טירגוט לממשקי ABI וטירגוט לפי מכשירים

צריך להגדיר מעקב ABI רק ליעדי ליבה של גרסת build של ליבה. סוגים שונים הגדרות build (הגדרות שמגדירות את base_kernel) שקורות ישירות עם ליבת GKI צריכה רק להוסיף תמיכה במעקב אחרי סמל המכשיר list. מומלץ לעדכן את הגדרת ה-ABI באמצעות ה-build של GKI.

ראו גם את מאמרי העזרה של Kleaf: תמיכה במעקב ABI (מכשיר).

גרסאות ליבה ישנות יותר

Android 13

הוראות ה-build זהות ברובן ב-Android 14 למעט שפורמט ה-ABI הוא XML ו ייצוג ה-ABI של ההפניה הוא common/android/abi_gki_aarch64.xml.

Android מגרסה 13 ומטה

כמו ב-Android 13, פורמט ה-ABI הוא XML.

בליבות ישנות יותר נעשה שימוש ב-build.sh במקום ב-Kleaf. כדי לעקוב אחרי ממשק ABI, צריך להשתמש build_abi.sh, שמקבל את אותם משתני סביבה כדי להתאים אישית בתור build.sh. לדוגמה:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

הפעולה הזו יוצרת את הליבה ומחלצת את ייצוג ה-ABI אל OUT_DIR (שהיא out_abi כברירת מחדל) והיא שוות ערך לספריית המשנה יעד אחד (//common:kernel_aarch64_abi_dist) של Kleaf (ראו פיתוח ליבה (kernel) וארטיפקטים של ABI).

ייצוג ה-ABI של קובץ העזר מאוחסן ב-android/abi_gki_aarch64.xml כ- מוגדר על ידי המשתנה ABI_DEFINITION ב-common/build.config.gki.aarch64.

אם אתם צריכים לעדכן את ייצוג ה-ABI של הליבה, הדרך הנוחה ביותר כדי להשתמש באפשרויות --update ו---print-report:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

ה---print-report מדפיס את ההבדלים ב-ABI בין הקובץ כמו שהוא קיים ו-ABI חדש.

האפשרות --update מחליפה את ייצוג ה-ABI של ההפניה. היא גם ה עדכון של רשימת הסמלים כשמשתמשים ב-BUILD_CONFIG עבור מכשיר שמוגדר בו KMI_SYMBOL_LIST.