ניתן לעדכן מודולי GKI ו-GKI באופן עצמאי משאר המחיצה מכיוון שמודולי GKI נמצאים על מחיצה דינמית נפרדת בתמונת העל הנקראת system_dlkm
. מודולי GKI נחתמים על ידי Google באמצעות צמד המפתחות בזמן בניית הליבה והם תואמים רק ל-GKI שאיתו הם בנויים. אין יציבות ABI בין מודולי GKI ו-GKI; כדי שהמודולים ייטענו כהלכה במהלך זמן הריצה, יש לבנות ולעדכן את מודולי GKI ו-GKI יחד.
הטמע תמיכה במחיצות system_dklm
מחיצת system_dlkm
ממוקמת במחיצת העל כמחיצה דינמית נוספת. מחיצה זו יכולה להכיל:
- מודולי ליבה חתומים בזמן הבנייה של Google
- חפצי
depmod
בניית 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
זהה מודולי ליבה להעתקה ל- system_dlkm
כדי שהמודולים ייטענו בהצלחה בזמן ריצה, יש לבנות מודולי GKI ו-GKI יחד. לכן עליך לזהות מודולי ליבה ב-GKI build עבור ארכיטקטורת היעד ולספק את זה כמקור למחיצת system_dlkm
במהלך בניית הפלטפורמה.
עבור אנדרואיד 13
הצבע על BOARD_SYSTEM_DLKM_SRC
לתיקיה המכילה את קובצי אובייקט ליבת מודולי GKI הנדרשים עבור ההתקן כקלט למערכת הבנייה ליצירת מחיצת system_dlkm
. לדוגמה:
ספק את מקור מודולי GKI בתיקייה והפנה את BOARD_SYSTEM_DLKM_SRC
לתיקיה זו. לדוגמה:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
בזמן הבנייה, מודולים הרשומים ב- BOARD_SYSTEM_DLKM_SRC
מותקנים ב- $ANDROID_PRODUCT_OUT/system_dlkm
.
עבור אנדרואיד 14
ייעלנו את היישום עם פקודות המאקרו ( BOARD_*_KERNEL_MODULES
) בשימוש עבור מחיצות *_dlkm
אחרות. יש להפנות לרשימת מודולי ה-GKI הנדרשים עבור ההתקן באמצעות מאקרו BOARD_SYSTEM_KERNEL_MODULES
. בזמן הבנייה המודולים האלה מותקנים ב- $ANDROID_PRODUCT_OUT/system_dlkm
. כל מודול במחיצת vendor_dlkm
שיש לו תלות במודולים במחיצת system_dlkm
יוצר הפניות נכונות בקובץ modules.dep
עבור המחיצה vendor_dlkm
. בשל תלות מחיצה צולבת זו המיוצגת על ידי modules.dep
, כאשר מודול ספק נטען, כל מודול GKI נדרש נטען אוטומטית.
לדוגמה, כדי להתקין את כל מודולי GKI במחיצת system_dlkm
עבור ליבת GKI arm64
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