為了支援無線 (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
)。當修改屬於插槽一部分的分割區時,引導程式會清除「成功引導」並重置插槽的重試計數。
引導程式也應該確定要載入哪個插槽。該圖顯示了決策過程範例。
確定要嘗試的插槽。不要嘗試載入標記為
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
指令或引導控制 HAL setActiveBootSlot
指令設定目前插槽時,引導程式應更新目前插槽,清除slot-unbootable
和slot-successful
,並重置重試計數(這是清除 slot-unbootable 和slot-unbootable
-successful 的唯一方法) slot-unbootable
)。
沒有 A/B 更新的設備
若要在不使用 A/B 更新的裝置上支援 OTA 更新(請參閱非 A/B 可更新裝置),請確保裝置引導程式符合下列條件。
recovery
分區應包含能夠從某些支援的分區(cache
、userdata
)讀取系統映像並將其寫入system
分區的映像。引導程式應支援直接重新啟動進入恢復模式。
如果支援無線電映像更新,
recovery
分割區也應該能夠刷新無線電。這可以透過以下兩種方式之一來完成:引導程式使無線電閃爍。在這種情況下,應該可以從恢復分割區重新引導回引導程式以完成更新。
恢復影像閃爍收音機。此功能可以作為二進位庫或實用程式提供。