引導加載程序是供應商專有的映像,負責在設備上啟動內核。它保護設備狀態並負責初始化可信執行環境並綁定其信任根。引導加載程序還在將執行移至內核之前驗證boot
和recovery
分區的完整性,並顯示引導狀態警告。
引導操作
要開始引導,引導加載程序可以直接將新映像刷入適當的分區或使用recovery
來啟動用於無線 (OTA) 更新的重新刷入過程。一些設備製造商創建多部分引導加載程序,然後將它們組合成一個bootloader.img
文件;在閃存時間,引導加載程序提取並刷新所有單獨的引導加載程序。
引導加載程序流程示例:
引導加載程序首先加載並初始化內存。
如果使用 A/B 更新,則引導加載程序確定要引導的當前插槽。
引導加載程序確定是否應引導恢復模式(請參閱支持更新)。
引導加載程序加載引導映像,其中包含內核和 ramdisk 映像。
引導加載程序將內核作為可自執行的壓縮二進製文件加載到內存中。然後內核解壓縮並開始在內存中執行。
引導加載程序從
ramdisk
分區(在較舊的設備上)或從系統分區(在較新的設備上)加載init
。從系統分區,
init
啟動並掛載所有其他分區(例如vendor
、oem
和odm
),然後開始執行代碼以啟動設備。
內核命令行
從以下位置連接內核命令行:
引導加載程序命令行:由引導加載程序確定的一組靜態和動態參數
設備樹:來自 selected/bootargs 節點
defconfig
: 來自CONFIG_CMDLINE
boot.img
:來自 cmdline(有關偏移量和大小,請參閱system/core/mkbootimg/bootimg.h
符合Android 兼容性定義文檔的規範重啟或關機原因,由電源管理集成電路 (PMIC)、其他硬件資源和重啟魔術參數 (
LINUX_REBOOT_CMD_RESTART2
) 消息確定。語法是:androidboot.bootreason=reason
支持設備樹和設備樹覆蓋
引導加載程序可以通過識別設備硬件/產品版本然後加載正確的設備樹覆蓋集來支持不同的配置。
支持內核地址空間佈局隨機化
為了支持隨機化加載內核映像的虛擬地址(由RANDOMIZE_BASE
內核配置啟用),引導加載程序必須通過在/chosen/kaslr-seed
設備樹節點中傳遞隨機 u64 值來提供熵。
支持驗證啟動
有關使用引導加載程序實現驗證引導的詳細信息,請參閱驗證引導。