引導程式概述

引導程式是供應商專有的映像,負責在裝置上啟動核心。引導程式保護裝置狀態,並負責初始化可信任執行環境 (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而不是核心命令列。