ב-Android 11 מוצגים המושגים 'Generic Kernel Image' ו'מחיצה לאתחול של הספק'. במחיצה של אתחול הספק מאוחסנים מודולים של ליבה שתואמים ל-GKI, והיא נטענת על ידי init בשלב הראשון. מודולים של ליבה (kernel) שפורסמו לפני 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.