כיצד להפעיל ניטור ABI

סעיף זה מתאר כיצד לבנות ייצוגי ABI של ליבת אנדרואיד ולהפעיל ניטור ABI. זה ישים לאנדרואיד 14 ומעלה. לגירסאות ישנות יותר, עיין בגירסאות ליבה ישנות יותר .

ראה גם את תיעוד ההפניה עבור Kleaf: ניטור ABI תמיכה (GKI) וניטור ABI תמיכה (התקן) .

בנה את הליבה ואת ייצוג ה-ABI שלו

לאחר הורדת מקורות GKI הפעל את הפקודה הבאה כדי לבנות את ליבת GKI וחפצי ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

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

אתה יכול לציין ארגומנטים נוספים עבור כלי 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 artifact שנמצא ב- out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short יחד עם דוחות בפורמטים אחרים.

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

שימו לב שלענפי שלב הפיתוח , כולל 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 המעודכן באותה commit של השינוי. אנא כלול את הבדלי ABI מהדוח ב- $DIST_DIR/abi.report.short בהודעת ה-commit.

ניטור ABI ומטרות מכשירים

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

ראה גם תיעוד עזר עבור Kleaf: תמיכת ניטור ABI (התקן) .

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

אנדרואיד 13

הוראות הבנייה זהות לרוב לאנדרואיד 14 פרט לכך שפורמט ה-ABI הוא XML והייצוג של ABI הוא common/android/abi_gki_aarch64.xml .

אנדרואיד 12 ומטה

כמו באנדרואיד 13, פורמט ABI הוא XML.

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

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

זה בונה את הליבה ומחלץ את ייצוג ABI לתוך ספריית המשנה OUT_DIR (שהיא out_abi כברירת מחדל) והוא שווה ערך ליעד //common:kernel_aarch64_abi_dist של Kleaf (ראה בניית חפצי ליבה ו-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 .