核心模組支援

一般核心映像檔 (GKI) 不得包含必要的驅動程式支援 讓裝置能夠掛接分區。如何讓裝置掛接分區 以便繼續啟動,已強化第一階段 init 來載入 ramdisk 上的核心模組。ramdisk 會分割成一般 供應商 ramdisks供應商核心模組會儲存在供應商的 ramdisk 中。 可設定核心模組的載入順序。

模組位置

ramdisk 是第一階段 init, 的檔案系統, A/B 和虛擬 A/B 裝置上的復原/快速啟動映像檔。這是 initramfs 包含兩個 cpio 封存檔,並串連在一起 開機載入器。第一個 cpio 封存檔案 (儲存為供應商 ramdisk) 中,其中包含以下元件:

  • 第一階段 init 供應商核心模組,位於 /lib/modules/
  • modprobe 設定檔,位於 /lib/modules/modules.depmodules.softdepmodules.aliasmodules.options
  • modules.load 檔案,用於指定要載入哪些模組 以及順序 /lib/modules/
  • A/B 和虛擬 A/B 裝置的供應商復原核心模組,位於 /lib/modules/
  • modules.load.recovery,代表要載入的模組;以及 按照順序為 A/B 和虛擬 A/B 裝置 /lib/modules

第二個 cpio 封存 (GKI 隨附) 做為 boot.img 的 ramdisk 使用,並套用於 第一個包含 first_stage_init 及其依附的程式庫。

第一階段 init 載入模組

第一階段 init 從讀取模組代理設定開始 ramdisk 中來自 /lib/modules/ 的檔案。接著,系統會讀取 指定的模組組合 (位於 /lib/modules/modules.load 中) 復原,/lib/modules/modules.load.recovery),並嘗試 並按照 先前載入的檔案您要求的訂單可能抵免 可滿足硬性或軟性依附元件

建構支援、第一階段初始

如要指定要複製到供應商 ramdisk cpio 的核心模組,請列出清單 這些圖片位於「BOARD_VENDOR_RAMDISK_KERNEL_MODULES」中。建構作業開始執行 對這些模組執行 depmod,並放入產生的模組化設定 該檔案位於供應商 ramdisk cpio 中

建構作業也會建立 modules.load 檔案,並儲存在 供應商 ramdisk cpio。根據預設,這個存放區包含 BOARD_VENDOR_RAMDISK_KERNEL_MODULES。如要覆寫 將該檔案使用 BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD,如 在這個例子中:

BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \
    device/vendor/mydevice-kernel/first.ko \
    device/vendor/mydevice-kernel/second.ko \
    device/vendor/mydevice-kernel/third.ko

建構支援,完整版 Android

與 Android 10 以下版本相同, Android 平台複製了 BOARD_VENDOR_KERNEL_MODULES 這些元件會建構在 /vendor/lib/modules 的廠商分區中 平台建構作業會在這些模組上執行 depmod,並複製 depmod 會將檔案輸出至供應商分區 或 HTTP/HTTPS 位置從 /vendor 載入核心模組的機制 與 Android 先前的版本一樣一切由您作主 載入這些模組的方式和時機。不過一般是使用 init.rc 指令碼。

萬用字元與整合式核心版本

將裝置核心版本與 Android 平台版本結合的供應商 使用上述 BOARD 巨集時,可能發生問題 指定要複製到裝置的核心模組。如果廠商希望避免 在裝置的平台建構檔案中列出核心模組,可以使用萬用字元 ($(wildcard device/vendor/mydevice/*.ko)。請注意,萬用字元並未 可在整合式核心版本中運作,因為當呼叫時, 巨集是在 makefile 中展開,但核心模組尚未建構,因此巨集 沒有內容。

為解決這個問題,供應商可能要求其核心版本建立 ZIP 檔案 這個封存檔,當中包含要複製到各個分區的核心模組。 在 BOARD_*_KERNEL_MODULES_ARCHIVE 中設定該 ZIP 封存檔的路徑 其中 * 是分區的名稱 (例如 BOARD_VENDOR_KERNEL_MODULES_ARCHIVE)。Android 平台版本 將這個 ZIP 封存檔擷取至適當位置,然後執行 depmod 單元 。

核心模組 ZIP 封存檔應制定一個規則,確保平台 您可以視需要產生封存檔

搶球

在先前的 Android 版本中,復原所需的核心模組為 (在 BOARD_RECOVERY_KERNEL_MODULES 中指定的)。在 Android 12 中, 復原所需的核心模組仍 要透過這個巨集指定什麼不過,系統會將復原核心模組複製到 供應商 ramdisk cpio,而非一般 ramdisk cpio。預設為全部 已載入 BOARD_RECOVERY_KERNEL_MODULES 中列出的核心模組 就在第一階段 init 中如果您只想要其中一部分 請在要載入的模組中指定該子集的內容 BOARD_RECOVERY_KERNEL_MODULES_LOAD

瞭解如何建立廠商啟動分區 (其中包含廠商) 本頁提及的 ramdisk),查看 靴子 分區