為了支持無線 (OTA) 更新,引導加載程序必須能夠在引導期間訪問恢復 RAM 磁盤。如果設備使用未修改的 AOSP 恢復映像,則引導加載程序讀取misc
分區上的前 32 個字節;如果那裡的數據與boot-recovery
匹配,則引導加載程序將引導至recovery
映像。此方法使任何掛起的恢復工作(例如,應用 OTA 或刪除數據)能夠繼續完成。
有關用於恢復和引導加載程序通信的閃存中的塊內容的詳細信息,請參閱bootable/recovery/bootloader_message/bootloader_message.h 。
具有 A/B 更新的設備
要在使用A/B 更新的設備上支持 OTA 更新,請確保設備引導加載程序滿足以下條件。
一般標準
通過 OTA 更新的所有分區都應該在主系統啟動時可更新(而不是在恢復時更新)。
為了引導
system
分區,引導加載程序在內核命令行上傳遞以下值:ro root=/dev/[node] rootwait init=/init
。從 HAL 調用
markBootSuccessful
是 Android 框架的責任。引導加載程序永遠不應將分區標記為已成功引導。
支持引導控制 HAL
引導加載程序必須支持hardware/libhardware/include/hardware/boot_control.h
中定義的boot_control
HAL)。更新程序查詢引導控制 HAL ,更新當前未使用的引導槽,使用 HAL 更改活動槽,然後重新引導到更新的操作系統。有關詳細信息,請參閱實現引導控制 HAL 。
支持插槽
引導加載程序必須支持與分區和插槽相關的功能,包括:
分區名稱必須包含一個後綴,用於標識哪些分區屬於引導加載程序中的特定插槽。對於每個這樣的分區,都有一個對應的變量
has-slot: partition base name
,其值為yes
。插槽按字母順序命名為 a、b、c 等,對應於後綴為_a
、_b
、_c
等的分區。引導加載程序應使用命令行屬性androidboot.slot_suffix
通知操作系統引導哪個插槽。此屬性是通過 bootconfig 為搭載 Android 12 或更高版本的設備設置的。通過
setActiveBootSlot
回調或通過fastboot set_active
命令,引導控制 HAL 將slot-retry-count
值重置為正值(通常為3
)。修改屬於插槽的分區時,引導加載程序會清除“成功引導”並重置插槽的重試計數。
引導加載程序還應確定要加載的插槽。該圖顯示了一個示例決策過程。
確定要嘗試的插槽。不要嘗試加載標記為
slot-unbootable
的插槽。該槽位應與fastboot返回的值一致,稱為當前槽位。如果當前插槽未標記為
slot-successful
並且slot-retry-count = 0
,則將當前插槽標記為slot-unbootable
。然後選擇另一個沒有標記為unbootable
並標記為slot-successful
的插槽;此插槽現在是選定的插槽。如果沒有可用的當前插槽,則啟動以恢復或向用戶顯示有意義的錯誤消息。選擇適當的
boot.img
並在內核命令行中包含正確係統分區的路徑。填充內核命令行
slot_suffix
參數。開機。如果未標記
slot-successful
,則減少slot-retry-count
。
fastboot
實用程序在運行任何閃存命令時確定要閃存的分區。例如,運行fastboot flash system system.img
命令首先查詢current-slot
變量,然後將結果連接到 system 以生成應該刷新的分區的名稱( system_a
, system_b
等)。
當使用 fastboot set_active
命令或 boot control HAL setActiveBootSlot
命令設置當前 slot 時,bootloader 應該更新當前 slot,清除slot-unbootable
和slot-successful
,並重置重試計數(這是清除slot-unbootable
)。
沒有 A/B 更新的設備
要在不使用 A/B 更新的設備上支持 OTA 更新(請參閱非 A/B 可更新設備),請確保設備引導加載程序滿足以下條件。
recovery
分區應該包含一個能夠從某個受支持的分區(cache
、userdata
數據)讀取系統映像並將其寫入system
分區的映像。引導加載程序應支持直接重啟進入恢復模式。
如果支持無線電映像更新,
recovery
分區也應該能夠刷新無線電。這可以通過以下兩種方式之一來完成:引導加載程序使收音機閃爍。在這種情況下,應該可以從恢復分區重新啟動到引導加載程序以完成更新。
恢復映像使收音機閃爍。此功能可以作為二進制庫或實用程序提供。