Android 11 引進了通用核心映像和供應商啟動分割區的概念。供應商引導分區儲存與GKI相容的核心模組,並由第一階段init載入。 Android 11 發布之前的核心模組也儲存在供應商和 ODM 分區中,並由供應商進程載入。
對於 Android 11 或更高版本,核心和所有核心模組都可以獨立於其餘分區進行更新。若要啟用儲存在供應商分區中的核心模組的更新(無需供應商分區更新),請將所有供應商分區模組移至名為Vendor DLKM (動態可載入核心模組)的新分區。然後您可以獨立更新該分割區。同樣,您可以將 ODM 分割區中儲存的所有核心模組移至名為ODM DLKM的新分割區。該分區也可以獨立更新。
分區位置
vendor_dlkm
和odm_dlkm
分區作為另一個動態分區位於超級分區。
/vendor/lib/modules 中的供應商_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
系統表
將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
系統表
將odm_dlkm
的以下項目新增至 fstab。根據設備更改標誌。以CL將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
輸出檔複製到映像中。建置會建立一個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)的文檔,請參閱核心模組支援。