供應商和 ODM DLKM 分區

Android 11 導入了一般核心的概念 映像檔和廠商啟動分區。廠商啟動分區儲存核心 並且由第一階段 init 載入核心模組 Android 11 之前的版本也會儲存在 和 ODM 分區,並由廠商程序載入。

如果是 Android 11 以上版本,核心和所有核心 模組可與其餘分區分開更新。啟用方式 更新供應商分區中 (無供應商) 的核心模組更新 分區更新) 中,將所有供應商分區模組移至名為 供應商 DLKM (動態載入的核心模組)。接著,您就能更新 和分區同樣地,您也可以移動儲存在 將 ODM 分區到名為 ODM DLKM 的新分區。這個分區的大小 也會獨立更新

分區位置

vendor_dlkmodm_dlkm 分區位於超分區中,如下所示: 其他動態分區

/vendor/lib/modules 中的 provider_dlkm 內容

  • 供應商核心模組
  • modprobe 個設定檔
  • 一個 modules.load 檔案

/odm/lib/modules 中的 odm_dlkm 內容

  • ODM 核心模組
  • modprobe 個設定檔
  • 一個 modules.load 檔案

請參閱核心模組 進一步支援 核心模組設定檔的詳細資料。

建構支援

建構 vendor_dlkmodm_dlkm 的程序類似於建構 動態分區

provider_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 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

一律針對供應商使用 /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_dlkmodm_dlkm 分區 分別掛接在 /vendor_dlkm/odm_dlkm 分區中。時間 這是因為 /vendor/lib/modules/odm/lib/modules 的符號連結會變成 廣告。

接著,供應商程序 (例如 .rc 指令碼) 就能以此方式載入核心模組 依照 modules.load 中指定的順序。供應商程序也可以載入 預先處理所有模組的疑慮

有關建立廠商啟動分區 ( 包含廠商 RAMDisk,請參閱核心模組 支援