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

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

עבור אנדרואיד 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 ל-CF כדוגמה.

vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

דוגמה לבניית 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 ו-Virtual A/B, device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

הוסף את הערך הבא עבור odm_dlkm ל-fstab. שנה דגלים בהתאם למכשיר. השתמש ב-CL Add odm_dlkm ל-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 . בניית הפלטפורמה מריץ את depmod על המודולים ומעתיקה את קבצי הפלט של depmod לתמונה. ה-build יוצר קובץ 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 של הספק), עיין ב- Kernel Module Support .