הגדר תכונות ליבה כמודולים של GKI

דף זה מכסה כיצד להגדיר תכונת ליבה חדשה כמודול GKI או להגדיר תכונת ליבה מובנית קיימת כמודול GKI.

הגדר תכונה חדשה כמודול GKI

  1. עבור התכונה החדשה, ערוך את gki_defconfig והגדר את פריט התצורה של תכונת הליבה הנדרשת מ- n ל- m ( =m ). הגדר הגדרה זו גם ב- arch/arm64/configs/gki_defconfig וגם arch/x86/configs/gki_defconfig .

  2. הוסף את קובצי ה-KO ( .ko ) שנוצרו עבור התכונה למקטע COMMON_GKI_MODULES_LIST של common/modules.bzl . הוסף את הקבצים בסדר ממוין. אם אינך בטוח בכל הקבצים שנוצרו, ה-build נכשל ומפרט את כל קבצי ה-KO הדרושים להוספה לרשימה.

  3. הוסף את אותה קבוצה של קבצי KO משלב 2, ממוינים בסדר עולה עבור חיפוש בינארי בזמן ריצה, אל common/android/gki_{ARCH}_protected_modules כדי לייעד את המודול כמודול GKI מוגן. עדכן את רשימת הייצוא המוגנים כדי לכלול כאלה מהמודול החדש שנוסף ב- common/android/abi_gki_protected_exports_{ARCH} באמצעות tools/bazel run //common:kernel_aarch64_abi_update_protected_exports עבור aarch64 . מודולים המוגדרים כמודולי GKI מוגנים עדיין חייבים להיות מאושרים על ידי Google כדי להיות מודולים מוגנים רשמיים.

  4. ודא שקבצי KO שנוספו לאחרונה משלב 2 מועתקים ל- out/<androidX-YZ>/dist/system_dlkm.img של הליבה ו- out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . מודולים בארכיון system_dlkm_staging_archive.tar.gz יכולים לשמש כקלט ליצירת system_dlkm.img בבניית הפלטפורמה.

  5. שלח את השינויים שלך לבדיקה. מודולי GKI הם תכונת ליבה של אנדרואיד בלבד, כך שאין צורך לשלוח תיקוני המרת מודולים במעלה הזרם. עם זאת, עליך לפעול לפי הנחיות אחרות כדי לשלוח תיקוני Android Common Kernel (ACK) .

הגדר תכונה מובנית של ליבה כמודול GKI

  1. עבור תכונת ליבה מובנית קיימת, ערוך את gki_defconfig והגדר את פריט התצורה של תכונת הקרנל הנדרשת מ- y ל- m ( =m ). הגדר הגדרה זו גם ב- arch/arm64/configs/gki_defconfig וגם arch/x86/configs/gki_defconfig .

  2. הוסף את קובצי ה-KO ( .ko ) שנוצרו עבור התכונה למקטע COMMON_GKI_MODULES_LIST של common/modules.bzl . הוסף את הקבצים בסדר ממוין. אם אינך בטוח בכל הקבצים שנוצרו, ה-build נכשל ומפרט את כל קבצי ה-KO הדרושים להוספה לרשימה.

  3. הוסף את אותה קבוצה של קבצי KO משלב 2, ממוינים בסדר עולה עבור חיפוש בינארי בזמן ריצה, אל common/android/gki_{ARCH}_protected_modules כדי לייעד את המודול כמודול GKI מוגן. עדכן את רשימת הייצוא המוגנים כדי לכלול כאלה מהמודול החדש שנוסף ב- common/android/abi_gki_protected_exports_{ARCH} באמצעות tools/bazel run //common:kernel_aarch64_abi_update_protected_exports עבור aarch64 . מודולים המוגדרים כמודולי GKI מוגנים עדיין חייבים להיות מאושרים על ידי Google כדי להיות מודולים מוגנים רשמיים.

  4. ודא שקובצי KO של מודול שהומרו לאחרונה משלב 2 מועתקים ל- out/<androidX-YZ>/dist/system_dlkm.img ו- out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz הליבה. מודולים בארכיון system_dlkm_staging_archive.tar.gz יכולים לשמש כקלט ליצירת system_dlkm.img בבניית הפלטפורמה.

  5. שלח את השינויים שלך לבדיקה. מודולי GKI הם תכונת ליבה של אנדרואיד בלבד, כך שאין צורך לשלוח תיקוני המרת מודולים במעלה הזרם. עם זאת, עליך לפעול לפי ההנחיות האחרות כדי לשלוח תיקוני Android Common Kernel (ACK) .

המר מודול GKI מוגן לבלתי מוגן

  1. הסר את המודול שמומר ממוגן ללא מוגן מרשימת המודולים המוגנים ב- common/android/gki_protected_modules .

  2. עדכן את רשימת היצואים המוגנים כדי לא לכלול כאלה מהמודול הלא מוגן שהומר לאחרונה ב- common/android/abi_gki_protected_exports_{ARCH} באמצעות tools/bazel run //common:kernel_aarch64_abi_update_protected_exports עבור aarch64 .

  3. שלח את השינויים שלך לבדיקה. מודולי GKI הם תכונת ליבה של אנדרואיד בלבד, כך שאין צורך לשלוח תיקוני המרת מודולים במעלה הזרם. עם זאת, עליך לפעול לפי ההנחיות האחרות כדי לשלוח תיקוני Android Common Kernel (ACK) .

מדריך מהיר לפתרון הפרת סמל מודולי GKI

כאשר מודולים לא חתומים מפרים את הגנת הסמלים הקיימת עבור מודולי GKI, ייתכן שתיתקל בשני סוגים של שגיאות במהלך טעינת המודול, וכתוצאה מכך כשל.

1. מודול לא חתום באמצעות הסמל המוגן

שְׁגִיאָה:

module: Protected symbol: some_kernel_function (err -13)

גורם:

הקובץ module.ko הוא מודול ספק לא חתום ומנסה לפתור את הסמל המיוצא של מודול GKI some_kernel_function במהלך הטעינה, מבלי להיות רשום ברשימת סמלי הספק.

פתרון הבעיה:

אם module.ko אינו מודול GKI מוגן, עדכון רשימת הסמלים יפתור את השגיאה על ידי הכללת some_kernel_function ברשימת הסמלים של הספק. לחלופין, השתמש בגרסת GKI של module.ko .

2. מודול לא חתום מייצא את הסמל המוגן

שְׁגִיאָה:

module: exports protected symbol some_kernel_function

גורם:

המודול המייצא את some_kernel_function הוא מודול GKI מוגן, ו- module.ko הוא כנראה גרסה מותאמת אישית לא חתומה של אותו מודול. כאשר module.ko מנסה לייצא some_kernel_function , שניתן לייצא רק על ידי מודול GKI חתום, הטעינה נכשלת עם הודעה זו.

פתרון הבעיה:

ניתן לתקן זאת על ידי שימוש בגרסת GKI של המודול שמייצא some_kernel_function , אם המודול הלא חתום הוא גרסה מותאמת אישית.