בדף הזה מוסבר איך לפתח ייצוגי 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
.