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