ב-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 של הספק), אפשר לעבור אל תמיכה במודול ליבת מערכת.