בדף הזה מוסבר איך להגדיר תכונת ליבה חדשה כמודול GKI, או להגדיר תכונת ליבה מוטמעת קיימת כמודול GKI.
הגדרת תכונה חדשה כמודול GKI
כדי להשתמש בתכונה החדשה, עורכים את
gki_defconfig
ומגדירים את פריט ההגדרה של תכונת הליבה הנדרשת מ-n
ל-m
(=m
). מגדירים את ההגדרה הזו גם ב-arch/arm64/configs/gki_defconfig
וגם ב-arch/x86/configs/gki_defconfig
.מוסיפים את קובצי ה-KO (
.ko
) שנוצרו לתכונה לקטעCOMMON_GKI_MODULES_LIST
שלcommon/modules.bzl
. מוסיפים את הקבצים בסדר ממוין. אם אתם לא בטוחים לגבי כל הקבצים שנוצרו, הבנייה תיכשל ויופיעו כל קובצי ה-KO שצריך להוסיף לרשימה.ב-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 (ACK).
הגדרת תכונה מובנית בקרנל כמודול GKI
כדי להשתמש בתכונה מובנית קיימת של ליבת מערכת ההפעלה, עורכים את
gki_defconfig
ומגדירים את פריט ההגדרה של התכונה הנדרשת של ליבת מערכת ההפעלה מ-y
ל-m
(=m
). מגדירים את ההגדרה הזו גם ב-arch/arm64/configs/gki_defconfig
וגם ב-arch/x86/configs/gki_defconfig
.מוסיפים את קובצי ה-KO (
.ko
) שנוצרו לתכונה לקטעCOMMON_GKI_MODULES_LIST
שלcommon/modules.bzl
. מוסיפים את הקבצים בסדר ממוין. אם אתם לא בטוחים לגבי כל הקבצים שנוצרו, הבנייה תיכשל ויופיעו כל קובצי ה-KO שצריך להוסיף לרשימה.ב-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 (ACK), צריך לפעול לפי ההנחיות האחרות.
המרת מודול GKI מוגן ללא מוגן
ב-Android מגרסה 15 ואילך, מוסיפים את המודול שממיר ממוגן ללא מוגן לרשימה
COMMON_UNPROTECTED_MODULES_LIST
בקובץ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
.