Bootloader 是供應商專屬的映像檔,負責在裝置上啟動核心。引導程序可保護裝置狀態,並負責初始化受信任的執行環境 (TEE) 及繫結信任根。系統啟動載入程式也會在將執行作業移至核心之前,驗證 boot
和 recovery
分割區的完整性。
系統啟動載入程式流程示例
以下是引導程式流程的示例:
載入並初始化記憶體。
根據驗證開機程序流程驗證裝置。
根據驗證開機程序流程,驗證啟動分區,包括
boot
、dtbo
、init_boot
和recovery
。在這個步驟中,請檢查 啟動映像檔標頭版本,並據此剖析標頭。如果使用 A/B 更新,請判斷要啟動的目前插槽。
判斷是否應開機至復原模式。詳情請參閱「支援 OTA 更新」。
載入開機映像檔,例如
boot.img
、vendor_boot.img
、init_boot.img
和其他專屬供應商開機映像檔。這些開機映像檔包含核心和 ramdisk 映像檔。將核心載入記憶體,做為可自行執行的壓縮二進位檔。核心會自行解壓縮,並開始在記憶體中執行。
將 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 起,如果需要將 androidboot.*
參數傳遞至 Android 使用者空間,我們可以使用 bootconfig 而非核心指令列。