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

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

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

מיקום המחיצה

המחיצות vendor_dlkm ו-odm_dlkm נמצאות במחיצה הסופר כמחיצה דינמית נוספת.

ספק_dlkm תוכן ב- /vendor/lib/Modules

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

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

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

מידע נוסף על קובצי תצורה של מודול ליבה זמין במאמר תמיכה במודול ליבה.

בניית תמיכה

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

דוגמה ל-build של 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 ובמכשירי 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 לתמונה. תהליך ה-build יוצר קובץ modules.load ושומר אותו בתמונה. הקובץ הזה מכיל את כל המודולים שמפורטים ב-BOARD_ODM_KERNEL_MODULES.

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

בזמן ה-build, המודולים שמפורטים ב-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, בהתאמה. במקרה כזה, קישורי ה-symlink ב-/vendor/lib/modules וב-/odm/lib/modules יהיו זמינים.

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

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