總覽

引導加載程序是供應商專有的映像,負責在設備上啟動內核。它保護設備狀態並負責初始化可信執行環境並綁定其信任根。引導加載程序還在將執行移至內核之前驗證bootrecovery分區的完整性,並顯示引導狀態警告。

引導操作

要開始引導,引導加載程序可以直接將新映像刷入適當的分區或使用recovery來啟動用於無線 (OTA) 更新的重新刷入過程。一些設備製造商創建多部分引導加載程序,然後將它們組合成一個bootloader.img文件;在閃存時間,引導加載程序提取並刷新所有單獨的引導加載程序。

引導加載程序流程示例:

  1. 引導加載程序首先加載並初始化內存。

  2. 如果使用 A/B 更新,則引導加載程序確定要引導的當前插槽。

  3. 引導加載程序確定是否應引導恢復模式(請參閱支持更新)。

  4. 引導加載程序加載引導映像,其中包含內核和 ramdisk 映像。

  5. 引導加載程序將內核作為可自執行的壓縮二進製文件加載到內存中。然後內核解壓縮並開始在內存中執行。

  6. 引導加載程序從ramdisk分區(在較舊的設備上)或從系統分區(在較新的設備上)加載init

  7. 從系統分區, init啟動並掛載所有其他分區(例如vendoroemodm ),然後開始執行代碼以啟動設備。

內核命令行

從以下位置連接內核命令行:

  • 引導加載程序命令行:由引導加載程序確定的一組靜態和動態參數

  • 設備樹:來自 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 值來提供熵。

支持驗證啟動

有關使用引導加載程序實現驗證引導的詳細信息,請參閱驗證引導