מחיצות DLKM של ספקים ו-ODM

ב-Android 11 הוצג המושג Generic Kernel Image (תמונת ליבה גנרית) ומחיצת האתחול של הספק. מחיצת האתחול של הספק מאחסנת מודולי ליבה שתואמים ל-GKI, והיא נטענת על ידי האתחול בשלב הראשון. מודולי ליבה לפני הגרסה של Android 11 מאוחסנים גם במחיצות של הספק ושל ה-ODM, והם נטענים על ידי תהליכי הספק.

ב-Android מגרסה 11 ואילך, אפשר לעדכן את ליבת המערכת ואת כל מודולי הליבה בנפרד משאר המחיצות. כדי להפעיל עדכונים למודולי ליבה שמאוחסנים במחיצת הספק (בלי לעדכן את מחיצת הספק), צריך להעביר את כל המודולים של מחיצת הספק למחיצה חדשה שנקראת Vendor DLKM (מודול ליבה שניתן לטעינה דינמית). אחר כך תוכלו לעדכן את המחיצה הזו בנפרד. באופן דומה, אפשר להעביר את כל מודולי הליבה (kernel) שמאוחסנים במחיצת ה-ODM למחיצה חדשה שנקראת ODM DLKM. אפשר גם לעדכן את המחיצה הזו בנפרד.

מיקום המחיצה

המחיצות vendor_dlkm ו-odm_dlkm ממוקמות במחיצת העל כמחיצה דינמית נוספת.

התוכן של vendor_dlkm ב-‎ /vendor/lib/modules

  • מודולים של ליבת הספק
  • modprobe קובצי תצורה
  • קובץ modules.load

התוכן של odm_dlkm ב-‎ /odm/lib/modules

  • מודולים של ליבת ODM
  • modprobe קובצי תצורה
  • קובץ modules.load

פרטים נוספים על קובצי ההגדרות של מודול הליבה זמינים במאמר בנושא תמיכה במודול הליבה.

בניית תמיכה

תהליך היצירה של vendor_dlkm ו-odm_dlkm דומה לתהליך היצירה של מחיצות דינמיות אחרות.

דוגמה לבנייה של vendor_dlkm

כך יוצרים את vendor_dlkm, כמו בדוגמאות הבאות.

BoardConfig.mk

BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm

מחליפים את <GROUP_NAME> בשם המתאים של קבוצת העדכון. קבוצת העדכון צריכה להיות הקבוצה שבה נמצאת המחיצה של הספק.

במכשירי A/B ומכשירי Virtual A/B, הקובץ device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

מוסיפים את הרשומה הבאה של vendor_dlkm ל-fstab. משנים את ההתראות בהתאם למכשיר. לדוגמה, אפשר להשתמש בפקודה CL Add vendor_dlkm to CF.

vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

דוגמה ל-build של odm_dlkm

כך יוצרים את odm_dlkm, כמו בדוגמאות הבאות.

BoardConfig.mk

BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm

במכשירים עם בדיקות A/B ובדיקות A/B וירטואליות, device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

מוסיפים את הרשומה הבאה של odm_dlkm ל-fstab. התראות על שינויים בהתאם למכשיר. לדוגמה, אפשר להשתמש בפקודה CL Add odm_dlkm to CF.

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

העתקת מודולי ליבה למחיצה

כדי לבחור את מודולי הליבה שרוצים להעתיק למחיצה vendor_dlkm, מפרטים אותם ב-BOARD_VENDOR_KERNEL_MODULES.

אם רוצים לשנות את התוכן של modules.load, אפשר לציין את זה ב-BOARD_VENDOR_KERNEL_MODULES_LOAD.

במשך זמן של תהליך build, המודולים שמפורטים ב-BOARD_VENDOR_KERNEL_MODULES מותקנים ב-$ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules. קישור סימבולי נוצר בנתיב /vendor/lib/modules שמוביל אל /vendor_dlkm/lib/modules.

באופן דומה, כדי לבחור את מודולי הליבה שרוצים להעתיק אל odm_dlkmהמחיצה, מפרטים אותם ב-BOARD_ODM_KERNEL_MODULES. ה-build של הפלטפורמה מריץ את depmod במודולים ומעתיק את קובצי הפלט depmod אל התמונה. תהליך הבנייה יוצר קובץ modules.load ושומר אותו בתמונה. הקובץ הזה מכיל את כל המודולים שמפורטים בקובץ BOARD_ODM_KERNEL_MODULES.

אם רוצים לשנות את התוכן של modules.load, אפשר לציין את זה ב-BOARD_ODM_KERNEL_MODULES_LOAD.

בזמן הבנייה, המודולים שמפורטים ב-BOARD_ODM_KERNEL_MODULES מותקנים ב-$ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules. נוצר קישור סימבולי בנתיב /odm/lib/modules שמוביל אל /odm_dlkm/lib/modules.

תמיד להשתמש ב-/vendor/lib/modules וב-/odm/lib/modules עבור מודולים של ליבת הספק ושל ODM.

אסור להשתמש ב-‎ /vendor_dlkm/lib/modules. מכשירים ללא vendor_dlkm מחיצה BOARD_VENDOR_KERNEL_MODULES מותקנים /vendor/lib/modules ישירות. זו בעיה כי /vendor_dlkm/lib/modules לא קיים.

לא להשתמש אף פעם ב-/odm_dlkm/lib/modules. מכשירים ללא מחיצת odm_dlkm התקנה של BOARD_ODM_KERNEL_MODULES ישירות ב-/odm/lib/modules. זו בעיה כי /odm_dlkm/lib/modules לא קיים.

טעינת מודולים והרכבת מחיצות

במהלך first_stage_init, המחיצות vendor_dlkm ו-odm_dlkm מותקנות בספריות /vendor_dlkm ו-/odm_dlkm, בהתאמה. במקרה כזה, הקישורים הסמליים ב-/vendor/lib/modules וב-/odm/lib/modules יהיו זמינים.

תהליך של ספק (כמו סקריפט .rc) יכול לטעון את מודולי הליבה על סמך הסדר שצוין ב-modules.load. תהליך הספק יכול גם לטעון את המודולים במועד מאוחר יותר, אם יש צורך בכך.

לעיון במסמכים בנושא יצירת מחיצת אתחול של ספק (שמכילה את ה-RAMDisk של הספק), אפשר לעבור אל תמיכה במודול ליבת מערכת.