בדף הזה נסביר איך מגדירים תכונה חדשה של הליבה כמודול 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
. מוסיפים את הקבצים בסדר ממוין. אם אתם לא בטוחים לגבי כל הקבצים שנוצרו, תהליך ה-build נכשל ותופיע רשימה של כל קובצי ה-KO הנדרשים להוספה לרשימה.(אופציונלי) במכשירי Android מגרסה 15 ואילך, אפשר לדלג על השלב הזה.
מוסיפים את אותה קבוצה של קובצי KO משלב 2, שממוינים בסדר עולה לחיפוש בינארי בזמן ריצה, אל
common/android/gki_{ARCH}_protected_modules
כדי לסמן את המודול כמודול GKI מוגן.מעדכנים את רשימת הייצוא כך שתכלול את הייצוא החדש שנוסף ב-
common/android/abi_gki_protected_exports_ARCHITECTURE
. לדוגמה, כדי לעדכן את הרשימה, מריצים אתtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
עבורaarch64
. מודולים שסווגו כמודולים מוגנים של GKI עדיין צריכים לקבל אישור מ-Google כדי להיחשב כמודולים מוגנים רשמיים.מוודאים שקובצי ה-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
ב-build של הפלטפורמה.שולחים את השינויים לבדיקה. מודולים של GKI הם תכונה של ליבה ל-Android בלבד, ולכן אין צורך לשלוח תיקוני המרה של מודולים למקור. עם זאת, כדי לשלוח תיקוני ליבה משותפים ל-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
. מוסיפים את הקבצים בסדר ממוין. אם אתם לא בטוחים לגבי כל הקבצים שנוצרו, תהליך ה-build נכשל ותופיע רשימה של כל קובצי ה-KO הנדרשים להוספה לרשימה.מוסיפים את אותה קבוצה של קובצי 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 כדי להיחשב כמודולים מוגנים רשמיים.מוודאים שקובצי ה-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
ב-build של הפלטפורמה.שולחים את השינויים לבדיקה. מודולים של GKI הם תכונה של ליבה ל-Android בלבד, ולכן אין צורך לשלוח תיקוני המרה של מודולים למקור. עם זאת, עליכם לפעול לפי ההנחיות האחרות כדי לשלוח תיקוני Android Common Kernel (ACK).
המרת מודול GKI מוגן למודול לא מוגן
- ב-Android 14 ובגרסאות קודמות: מסירים את המודול שמומר ממודול מוגן למודול לא מוגן מרשימת המודולים המוגנים בקובץ
common/android/gki_protected_modules
.
- ב-Android מגרסה 15 ואילך: מוסיפים את המודול שמומר ממודול מוגן למודול לא מוגן לרשימת
COMMON_UNPROTECTED_MODULES_LIST
בקובץcommon/modules.bzl
.
- ב-Android 14 ובגרסאות קודמות: מסירים את המודול שמומר ממודול מוגן למודול לא מוגן מרשימת המודולים המוגנים בקובץ
מעדכנים את רשימת הייצוא המוגנים כך שלא תכלול את הייצוא מהמודול הלא מוגן שהומר לאחרונה, בקטע
common/android/abi_gki_protected_exports_{ARCH}
באמצעותtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
במקוםaarch64
.שולחים את השינויים לבדיקה. מודולים של GKI הם תכונה של ליבה ל-Android בלבד, ולכן אין צורך לשלוח תיקוני המרה של מודולים למקור. עם זאת, עליכם לפעול לפי ההנחיות האחרות כדי לשלוח תיקוני Android Common Kernel (ACK).
מדריך מהיר לפתרון הפרות של סמלים במודולים של GKI
כשמודולים לא חתומים מפירים את ההגנה על הסמלים שמוגדרת למודול GKI, יכולים להתרחש שני סוגים של שגיאות במהלך טעינת המודול, וכתוצאה מכך הוא ייכשל.
1. מודול לא חתום באמצעות הסמל המוגן
שגיאה:
module: Protected symbol: some_kernel_function (err -13)
הסיבה:
קובץ module.ko
הוא מודול של ספק ללא חתימה, שמנסה לפתור את הסמל some_kernel_function
שיוצאו מהמודול GKI במהלך הטעינה, בלי להופיע ברשימת הסמלים של הספק.
פתרון:
אם module.ko
הוא לא מודול GKI מוגן, הפתרון לשגיאה הוא לעדכן את רשימת הסמלים כך ש-some_kernel_function
יהיה כלול ברשימת הסמלים של הספק.
לחלופין, אפשר להשתמש בגרסה של module.ko
ב-GKI.
2. מודול לא חתום שמייצא את הסמל המוגן
שגיאה:
module: exports protected symbol some_kernel_function
הסיבה:
המודול שמייצא את some_kernel_function
הוא מודול GKI מוגן, ו-module.ko
הוא כנראה גרסה מותאמת אישית לא חתומה של המודול הזה. כש-module.ko
מנסה לייצא את some_kernel_function
, שאפשר לייצא רק באמצעות מודול GKI חתום, הטעינה נכשלת עם ההודעה הזו.
פתרון:
אפשר לתקן את הבעיה באמצעות גרסה של GKI של המודול שמייצא את some_kernel_function
, אם המודול ללא החתימה הוא גרסה מותאמת אישית.