ניתן לעדכן את המודולים של 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
ל-build, פועלים לפי השלבים הבאים:
ב-
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
של GKI
ליבה של arm64
5.15
מגרסאות מוכנות מראש:
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