系統啟動載入程式總覽

Bootloader 是供應商專屬的映像檔,負責在裝置上啟動核心。引導程式會保護裝置狀態,並負責初始化受信任的執行環境 (TEE) 和繫結信任根。系統啟動載入程式也會在將執行作業移至核心之前,驗證 bootrecovery 分割區的完整性。

系統啟動載入程式流程示例

以下是引導程式流程的示例:

  1. 載入並初始化記憶體。

  2. 根據驗證開機程序流程驗證裝置。

  3. 根據驗證開機程序流程,驗證啟動分區,包括 bootdtboinit_bootrecovery。在這個步驟中,請檢查 啟動映像檔標頭版本,並據此剖析標頭。

  4. 如果使用 A/B 更新,請判斷要啟動的目前插槽。

  5. 判斷是否應啟動復原模式。詳情請參閱「支援 OTA 更新」。

  6. 載入啟動映像檔,例如 boot.imgvendor_boot.imginit_boot.img 和其他專有廠商開機映像檔。這些開機映像檔包含核心和 ramdisk 映像檔。

    1. 將核心載入記憶體,做為可自行執行的壓縮二進位檔。核心會自行解壓縮,並開始在記憶體中執行。

    2. 將 ramdisk 和 bootconfig 區段載入記憶體,以建立 initramfs

其他與啟動載入程式相關的功能

以下列出可實作的其他引導程式相關功能:

  • 裝置樹狀結構疊加層 (DTO)。裝置樹狀結構疊加層可讓引導程式支援不同的硬體設定。DTO 會編譯為系統啟動載入程式使用的裝置樹狀結構 blob (DTB)

  • 隨機產生核心映像檔虛擬位址。系統啟動載入程式支援隨機載入核心映像檔的虛擬位址。如要隨機設定位址,請在核心設定中將 RANDOMIZE_BASE 設為 true。系統啟動載入程式必須在 /chosen/kaslr-seed 裝置樹狀結構節點中傳遞隨機 u64 值,才能提供熵。

  • 驗證開機程序。驗證開機程序可讓啟動載入程式確保所有執行的程式碼都來自可信任的來源。

  • 啟動設定開機設定可在 Android 12 以上版本中使用,這是一種機制,可將設定詳細資料從建構和啟動載入程式傳遞至作業系統。在 Android 12 之前,會使用前置符號為 androidboot 的核心指令列參數。

  • 無線更新 (OTA)。這個欄位中的 Android 裝置可以接收並安裝系統、應用程式軟體和時區規則的 OTA 更新。這項功能會影響系統啟動載入程式實作項目。如需 OTA 的一般資訊,請參閱「OTA 更新」。如需系統啟動載入程式專屬 OTA 實作詳細資訊,請參閱「支援 OTA 更新」。

  • 版本繫結版本繫結會將安全性金鑰繫結至作業系統和修補程式等級版本。版本繫結可確保攻擊者在舊版系統或 TEE 軟體中發現弱點時,無法將裝置回溯至有安全漏洞的版本,並使用新版建立的金鑰。引導程式必須提供特定資訊,才能支援版本繫結。詳情請參閱「AVB 資源中的版本資訊」。

核心指令列

將以下位置的核心命令列連結在一起:

  • 啟動載入程式指令列:由啟動載入程式決定的靜態和動態參數組合

  • 裝置樹狀結構:來自 chosen/bootargs 節點

  • defconfig:從 CONFIG_CMDLINE

  • boot.img:透過指令列 (如需偏移和大小,請參閱 system/core/mkbootimg/bootimg.h

自 Android 12 起,針對需要傳遞至 Android 使用者空間的 androidboot.* 參數,可以使用 bootconfig 取代核心指令列。