Android 11 引入了一般核心映像檔和供應商啟動分區的概念。供應商啟動分割區會儲存與 GKI 相容的核心模組,並由第一階段初始載入。Android 11 版本之前的核心模組也會儲存在供應商和 ODM 分區中,並由供應商程序載入。
在 Android 11 以上版本中,核心和所有核心模組可獨立於其他分區更新。如要啟用儲存在供應商分區的核心模組更新 (不需供應商分區更新),請將所有供應商分區模組移至名為「Vendor DLKM」的新分區 (可動態載入的核心模組)。接著,您可以獨立更新這個分區。同樣地,您可以將儲存在 ODM 分區中的所有核心模組移至名為 ODM DLKM 的新分區。這個分區也可以獨立更新。
分區位置
vendor_dlkm
和 odm_dlkm
分區位於超分區中,做為另一個動態分區。
/vendor/lib/modules 中的 vendor_dlkm 內容
- 供應商核心模組
modprobe
設定檔- 一個
modules.load
檔案
/odm/lib/modules 中的 odm_dlkm 內容
- 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 和虛擬 A/B 裝置,device.mk
AB_OTA_PARTITIONS += vendor_dlkm
Fstab
將 vendor_dlkm
的項目新增至 fstab。根據裝置變更標記。請使用 CL 將 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 和虛擬 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
中列出這些模組。平台版本會在模組上執行 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
。
針對供應商和 ODM 核心模組,一律使用 /vendor/lib/modules
和 /odm/lib/modules
。
不得使用 /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) 的相關資訊,請參閱核心模組支援。