供應商/ODM DLKM 分區

Android 11 引進了通用核心映像和供應商啟動分割區的概念。供應商引導分區儲存與GKI相容的核心模組,並由第一階段init載入。 Android 11 發布之前的核心模組也儲存在供應商和 ODM 分區中,並由供應商進程載入。

對於 Android 11 或更高版本,核心和所有核心模組都可以獨立於其餘分區進行更新。若要啟用儲存在供應商分區中的核心模組的更新(無需供應商分區更新),請將所有供應商分區模組移至名為Vendor DLKM (動態可載入核心模組)的新分區。然後您可以獨立更新該分割區。同樣,您可以將 ODM 分割區中儲存的所有核心模組移至名為ODM​​ DLKM的新分割區。該分區也可以獨立更新。

分區位置

vendor_dlkmodm_dlkm分區作為另一個動態分區位於超級分區。

/vendor/lib/modules 中的供應商_dlkm 內容

  • 供應商內核模組
  • modprobe配置文件
  • 一個modules.load文件

/odm/lib/modules 中的 odm_dlkm 內容

  • ODM核心模組
  • modprobe配置文件
  • 一個modules.load文件

有關內核模組配置文件的更多詳細信息,請參閱內核模組支援

建立支持

建構vendor_dlkmodm_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。根據設備更改標誌。以CLvendor_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。根據設備更改標誌。以CLodm_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_dlkmodm_dlkm分區分別掛載在/vendor_dlkm/odm_dlkm分區。發生這種情況時, /vendor/lib/modules/odm/lib/modules處的符號連結將變得可用。

然後,供應商進程(如「.rc」腳本)可以根據modules.load中指定的順序載入核心模組。如有必要,供應商進程還可以稍後載入模組。

有關建立供應商引導分區(包含供應商 RAMDisk)的文檔,請參閱核心模組支援