Android 11 導入了一般核心的概念 映像檔和廠商啟動分區。廠商啟動分區儲存核心 並且由第一階段 init 載入核心模組 Android 11 之前的版本也會儲存在 和 ODM 分區,並由廠商程序載入。
如果是 Android 11 以上版本,核心和所有核心 模組可與其餘分區分開更新。啟用方式 更新供應商分區中 (無供應商) 的核心模組更新 分區更新) 中,將所有供應商分區模組移至名為 供應商 DLKM (動態載入的核心模組)。接著,您就能更新 和分區同樣地,您也可以移動儲存在 將 ODM 分區到名為 ODM DLKM 的新分區。這個分區的大小 也會獨立更新
分區位置
vendor_dlkm
和 odm_dlkm
分區位於超分區中,如下所示:
其他動態分區
/vendor/lib/modules 中的 provider_dlkm 內容
- 供應商核心模組
modprobe
個設定檔- 一個
modules.load
檔案
/odm/lib/modules 中的 odm_dlkm 內容
- ODM 核心模組
modprobe
個設定檔- 一個
modules.load
檔案
請參閱核心模組 進一步支援 核心模組設定檔的詳細資料。
建構支援
建構 vendor_dlkm
和 odm_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_dlkm
和 odm_dlkm
分區
分別掛接在 /vendor_dlkm
和 /odm_dlkm
分區中。時間
這是因為 /vendor/lib/modules
和 /odm/lib/modules
的符號連結會變成
廣告。
接著,供應商程序 (例如 .rc
指令碼) 就能以此方式載入核心模組
依照 modules.load
中指定的順序。供應商程序也可以載入
預先處理所有模組的疑慮
相關說明文件
有關建立廠商啟動分區 ( 包含廠商 RAMDisk,請參閱核心模組 支援: