支持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

  • Android 框架負責從 HAL 呼叫markBootSuccessful 。引導程式絕不應將分割區標記為已成功引導。

支援啟動控制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通知作業系統引導了哪個插槽。對於使用 Android 12 或更高版本啟動的設備,此屬性透過 bootconfig 設定。

  • slot-retry-count值透過setActiveBootSlot回呼或透過fastboot set_active指令由引導控制 HAL 重設為正值(通常為3 )。當修改屬於插槽一部分的分割區時,引導程式會清除「成功引導」並重置插槽的重試計數。

引導程式也應該確定要載入哪個插槽。該圖顯示了決策過程範例。

Bootloader開槽流程
圖 1.引導程式槽位流程
  1. 確定要嘗試的插槽。不要嘗試載入標記為slot-unbootable插槽。此槽位應與fastboot回傳的值一致,稱為目前槽位。

  2. 如果目前插槽未標記為slot-successfulslot-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指令或引導控制 HAL setActiveBootSlot指令設定目前插槽時,引導程式應更新目前插槽,清除slot-unbootableslot-successful ,並重置重試計數(這是清除 slot-unbootable 和slot-unbootable -successful 的唯一方法) slot-unbootable )。

沒有 A/B 更新的設備

若要在不使用 A/B 更新的裝置上支援 OTA 更新(請參閱非 A/B 可更新裝置),請確保裝置引導程式符合下列條件。

  • recovery分區應包含能夠從某些支援的分區( cacheuserdata )讀取系統映像並將其寫入system分區的映像。

  • 引導程式應支援直接重新啟動進入恢復模式。

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

    • 引導程式使無線電閃爍。在這種情況下,應該可以從恢復分割區重新引導回引導程式以完成更新。

    • 恢復影像閃爍收音機。此功能可以作為二進位庫或實用程式提供。