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

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

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

דוגמה ל-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 של הספק), אפשר לעיין במאמר Kernel Module Support.