בדף הזה מוסבר איך להגדיר תכונת ליבה חדשה כמודול GKI או להגדיר תכונת ליבה מוטמעת קיימת כמודול GKI.
הגדרת תכונה חדשה כמודול GKI
כדי להשתמש בתכונה החדשה, צריך לערוך את
gki_defconfigולהגדיר את פריט ההגדרה של תכונת הליבה הנדרשת מ-nל-m(=m). צריך להגדיר את ההגדרה הזו גם ב-arch/arm64/configs/gki_defconfigוגם ב-arch/x86/configs/gki_defconfig.מוסיפים את הקבצים של KO (
.ko) שנוצרו לתכונה לקטע_COMMON_GKI_MODULES_LISTבקובץ הבא. מוסיפים את הקבצים בסדר ממוין. אם אתם לא בטוחים לגבי כל הקבצים שנוצרו, הבנייה תיכשל ויוצגו כל קובצי ה-KO שצריך להוסיף לרשימה.- ב-
android17-6.18ומעלה, מוסיפים פריטים ל-common/bazel/modules_private.bzl. - ב-
android16-6.12ובגרסאות קודמות, מוסיפים פריטים ל-common/modules.bzl.
- ב-
ב-Android 14, מוסיפים את אותה קבוצה של קובצי KO משלב 2, ממוינים בסדר עולה לחיפוש בינארי בזמן ריצה, אל
common/android/gki_{ARCH}_protected_modulesכדי לציין את המודול כמודול GKI מוגן.ב-Android 14 וב-Android 15, צריך לעדכן את רשימת הייצוא כך שתכלול את הייצוא החדש שנוסף ב-
common/android/abi_gki_protected_exports_ARCHITECTURE. לדוגמה, כדי לעדכן את הרשימה, מריצים את הפקודהtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsעבורaarch64.מוודאים שקבצי ה-KO החדשים שהוספתם בשלב 2 מועתקים ל-
out/<androidX-Y.Z>/dist/system_dlkm.imgול-out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzשל הליבה. אפשר להשתמש במודולים בארכיוןsystem_dlkm_staging_archive.tar.gzכקלט ליצירתsystem_dlkm.imgבגרסת הפלטפורמה.שולחים את השינויים לבדיקה. מודולים של GKI הם תכונה של ליבת Android בלבד, ולכן אין צורך לשלוח תיקונים להמרת מודולים ל-upstream. עם זאת, יש הנחיות אחרות שצריך לפעול לפיהן כדי לשלוח תיקונים ל-Android Common Kernel (ACK).
הגדרת תכונה מובנית בקרנל כמודול GKI
כדי להשתמש בתכונה מובנית קיימת של ליבת מערכת ההפעלה, עורכים את
gki_defconfigומגדירים את פריט ההגדרה של התכונה הנדרשת של ליבת מערכת ההפעלה מ-yל-m(=m). מגדירים את ההגדרה הזו גם ב-arch/arm64/configs/gki_defconfigוגם ב-arch/x86/configs/gki_defconfig.מוסיפים את קובצי ה-KO (
.ko) שנוצרו לתכונה לקטע_COMMON_GKI_MODULES_LISTבקובץ הבא. מוסיפים את הקבצים בסדר ממוין. אם אתם לא בטוחים לגבי כל הקבצים שנוצרו, הבנייה תיכשל ויוצגו כל קובצי ה-KO שצריך להוסיף לרשימה.- ב-
android17-6.18ומעלה, מוסיפים פריטים ל-common/bazel/modules_private.bzl. - ב-
android16-6.12ומטה, מוסיפים פריטים ל-common/modules.bzl.
- ב-
ב-Android 14, מוסיפים את אותה קבוצה של קובצי KO משלב 2, ממוינים בסדר עולה לחיפוש בינארי בזמן ריצה, אל
common/android/gki_{ARCH}_protected_modulesכדי לציין את המודול כמודול GKI מוגן.ב-Android 14 וב-Android 15, צריך לעדכן את רשימת הייצוא המוגנים כדי לכלול ייצוא מהמודול החדש שנוסף ב-
common/android/abi_gki_protected_exports_{ARCH}באמצעותtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsעבורaarch64.מוודאים שקבצי ה-KO של המודול שהומרו בשלב 2 מועתקים אל
out/<androidX-Y.Z>/dist/system_dlkm.imgו-out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzשל ליבת המערכת. אפשר להשתמש במודולים בארכיוןsystem_dlkm_staging_archive.tar.gzכקלט ליצירתsystem_dlkm.imgבגרסת הפלטפורמה.שולחים את השינויים לבדיקה. מודולים של GKI הם תכונה של ליבת Android בלבד, ולכן אין צורך לשלוח תיקונים להמרת מודולים ל-upstream. עם זאת, כדי לשלוח תיקונים ל-Android Common Kernel (ACK), צריך לפעול לפי ההנחיות האחרות.
המרת מודול GKI מוגן ללא מוגן
ב-Android מגרסה 15 ואילך, מוסיפים את המודול שמומר ממוגן ללא מוגן לרשימה
_COMMON_UNPROTECTED_MODULES_LISTבקובץ הבא:- ב-
android17-6.18ומעלה, מוסיפים פריטים ל-common/bazel/modules_private.bzl. - ב-
android16-6.12ובגרסאות קודמות, מוסיפים פריטים ל-common/modules.bzl.
- ב-
ב-Android 14, מסירים את המודול שממיר ממוגן ללא מוגן מרשימת המודולים המוגנים בכתובת
common/android/gki_protected_modules.ב-Android 14 וב-Android 15, צריך לעדכן את רשימת היצוא המוגן כדי להחריג את היצוא מהמודול החדש שהומר ולא מוגן ב-
common/android/abi_gki_protected_exports_{ARCH}באמצעותtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsעבורaarch64.שולחים את השינויים לבדיקה. מודולים של GKI הם תכונה של ליבת Android בלבד, ולכן אין צורך לשלוח תיקונים להמרת מודולים ל-upstream. עם זאת, כדי לשלוח תיקונים לליבה המשותפת של Android (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, אם המודול הלא חתום הוא גרסה בהתאמה אישית.