ניתן לעדכן את המודולים של GKI ו-GKI בנפרד משאר המחיצה
כי מודולים של GKI נמצאים במחיצה דינמית נפרדת בתמונת העל
שנקרא system_dlkm
. המודולים של GKI נחתמים על ידי Google באמצעות הליבה (kernel)
זוג מפתחות זמן build ותואמים רק ל-GKI שהם נוצרו איתו.
אין יציבות ABI בין מודולים של GKI ו-GKI; כדי שהמודולים ייטענו
בזמן הריצה, יש ליצור ולעדכן את המודולים של GKI ו-GKI
את כל החלקים.
הטמעת תמיכה במחיצה system_dklm
המחיצה system_dlkm
ממוקמת במחיצת העל כדינמיקה נוספת
מחיצה. המחיצה הזו יכולה להכיל:
- מודולים של ליבה (kernel) חתומים בזמן ה-build של Google
depmod
פריטי מידע שנוצרו בתהליך פיתוח (Artifact)
Build system_dlkm
תהליך היצירה של system_dlkm
דומה לתהליך היצירה של מחיצות דינמיות אחרות. כדי להוסיף את system_dlkm
לגרסה היציבה:
בקובץ
BoardConfig.mk
, מוסיפים את הרשומות הבאות:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
ברשימת המחיצות, מוסיפים את
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(אופציונלי) עבור מכשירי A/B ומכשירי A/B וירטואליים, מוסיפים את השורה הבאה קובץ
device.mk
למכשיר שלך:AB_OTA_PARTITIONS += system_dlkm
זיהוי מודולים של ליבה (kernel) להעתקה אל system_dlkm
כדי שהמודולים ייטענו בהצלחה בסביבת זמן הריצה, צריך ליצור יחד את GKI ואת המודולים של GKI. לכן צריך לזהות מודולים של ליבה ב-build של GKI עבור
את ארכיטקטורת היעד ומספקים אותה כמקור למחיצה system_dlkm
במהלך ה-build של הפלטפורמה.
ל-Android 13
להפנות את המשתמש BOARD_SYSTEM_DLKM_SRC
לתיקייה שמכילה את המודולים הנדרשים של GKI
קובצי אובייקט ליבה (kernel) של המכשיר כקלט למערכת ה-build כדי ליצור
המחיצה system_dlkm
. לדוגמה:
צריך לספק את המקור של המודולים של GKI בתיקייה ולהפנות ל-BOARD_SYSTEM_DLKM_SRC
התיקייה הזו. לדוגמה:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
בזמן ה-build, המודולים שרשומים ב-BOARD_SYSTEM_DLKM_SRC
מותקנים ב:
$ANDROID_PRODUCT_OUT/system_dlkm
.
ב-Android 14
ייעלנו את ההטמעה באמצעות המאקרו (BOARD_*_KERNEL_MODULES
) שמשמש למחיצות *_dlkm
אחרות. רשימת המודולים של GKI הנדרשים למכשיר צריכה להיות
שיש הפניה אליו במאקרו BOARD_SYSTEM_KERNEL_MODULES
. בזמן ה-build, המודולים האלה
מותקנות דרך $ANDROID_PRODUCT_OUT/system_dlkm
. כל מודול במחיצה vendor_dlkm
שיש לו יחסי תלות במודולים במחיצה system_dlkm
יוצר הפניות נכונות בקובץ modules.dep
למחיצה vendor_dlkm
. בגלל יחסי התלות בין מחיצות
על ידי modules.dep
, כאשר
מודול הספק נטען, כל מודול נדרש של GKI נטען באופן אוטומטי.
לדוגמה, כדי להתקין את כל המודולים של GKI במחיצה system_dlkm
עבור הליבה arm64
של GKI 5.15
מ-prebuilts:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
טעינה של system_dlkm
בזמן הריצה
בהתאם למערכת הקבצים שבה נעשה שימוש כמערכת קבצים לקריאה בלבד, מוסיפים את הקטע הבא לקובץ fstab
כדי לטעון את המחיצה system_dlkm
בזמן הריצה:
ext4
כמערכת קבצים לקריאה בלבד
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
כמערכת קבצים לקריאה בלבד
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
חיבור מחיצות וטעינה של מודולים
במהלך first_stage_init
, המחיצה system_dlkm
נטענת
/system_dlkm
כמערכת קבצים לקריאה בלבד. על טעינה מוצלחת,
קישורים ב-/system/lib/modules
שמפנים אל /system_dlkm/lib/modules
הם
זמינים.
לאחר מכן, תהליך של ספק, כמו סקריפט .rc
, יכול לטעון את מודולי הליבה לפי הסדר שצוין ב-modules.load
. בתהליך הספק צריך להשתמש
הקישור הסימבולי /system/lib/modules
כדי לטעון את המודולים.
במקרה הצורך, בתהליך הספק אפשר גם לטעון את המודולים במועד מאוחר יותר.
SELinux
כל קובץ במחיצה system_dlkm
מתויג עם הקשר הקובץ של
system_dlkm_file
. כדי לטעון את קובץ המודולים של GKI במחיצה system_dlkm
,
בתהליך הספק שאחראי לטעינת המודולים, נדרש sepolicy
דומיין הספק.
לדוגמה, בפונקציה dlkm_loader
שמשמשת את Cuttlefish לטעינת מודולים של GKI יש את
בהרשאות הבאות בקובץ המדיניות
shared/sepolicy/vendor/dlkm_loader.te
:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
אימות המחיצה של System-dlkm
Google מספקת מקרה בדיקה ל-GKI VTS כדי לאמת את המחיצה system_dlkm
. כדי להפעיל את הבדיקה באופן ידני, משתמשים בפקודה atest
הבאה:
atest -c vts_dlkm_partition_test