支持OTA更新

為了支持無線 (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 )。修改屬於插槽的分區時,引導加載程序會清除“成功引導”並重置插槽的重試計數。

引導加載程序還應確定要加載的插槽。該圖顯示了一個示例決策過程。

引導加載程序開槽流程
圖 1.引導加載程序插槽流程
  1. 確定要嘗試的插槽。不要嘗試加載標記為slot-unbootable的插槽。該槽位應與fastboot返回的值一致,稱為當前槽位。

  2. 如果當前插槽未標記為slot-successful並且slot-retry-count = 0 ,則將當前插槽標記為slot-unbootable 。然後選擇另一個沒有標記為unbootable並標記為slot-successful的插槽;此插槽現在是選定的插槽。如果沒有可用的當前插槽,則啟動以恢復或向用戶顯示有意義的錯誤消息。

  3. 選擇適當的boot.img並在內核命令行中包含正確係統分區的路徑。

  4. 填充內核命令行slot_suffix參數。

  5. 開機。如果未標記slot-successful ,則減少slot-retry-count

fastboot實用程序在運行任何閃存命令時確定要閃存的分區。例如,運行fastboot flash system system.img命令首先查詢current-slot變量,然後將結果連接到 system 以生成應該刷新的分區的名稱( system_asystem_b等)。

當使用 fastboot set_active命令或 boot control HAL setActiveBootSlot命令設置當前 slot 時,bootloader 應該更新當前 slot,清除slot-unbootableslot-successful ,並重置重試計數(這是清除slot-unbootable )。

沒有 A/B 更新的設備

要在不使用 A/B 更新的設備上支持 OTA 更新(請參閱非 A/B 可更新設備),請確保設備引導加載程序滿足以下條件。

  • recovery分區應該包含一個能夠從某個受支持的分區( cacheuserdata數據)讀取系統映像並將其寫入system分區的映像。

  • 引導加載程序應支持直接重啟進入恢復模式。

  • 如果支持無線電映像更新, recovery分區也應該能夠刷新無線電。這可以通過以下兩種方式之一來完成:

    • 引導加載程序使收音機閃爍。在這種情況下,應該可以從恢復分區重新啟動到引導加載程序以完成更新。

    • 恢復映像使收音機閃爍。此功能可以作為二進制庫或實用程序提供。