הטמע מחיצת מודול GKI

ניתן לעדכן מודולי 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 שלך:

  1. ב- 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
    
  2. ברשימת המחיצות, הוסף system_dlkm : BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (אופציונלי) עבור התקני 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