如要實作無線更新 (OTA),系統啟動載入程式必須能在啟動期間存取復原 RAM 磁碟。如果裝置使用未經修改的 AOSP 復原映像檔,系統啟動載入程式會讀取 misc
分區的前 32 個位元組;如果該資料與 boot-recovery
相符,系統啟動載入程式就會啟動 recovery
映像檔。這個方法可讓任何待處理的復原作業 (例如套用 OTA 或移除資料) 繼續執行,直到完成為止。
如要進一步瞭解復原作業和系統啟動載入程式用於通訊的 Flash 區塊內容,請參閱 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
值會重設為正值 (通常為3
),方法是透過setActiveBootSlot
回呼或fastboot set_active
指令,由啟動控制 HAL 進行。修改運算單元的分區時,系統啟動載入程式會清除「成功啟動」並重設該運算單元的重試次數。
系統啟動載入程式也應決定要載入哪個插槽。圖表顯示決策程序的範例。
決定要嘗試哪個時段。請勿嘗試載入標示為
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_a
、system_b
等)。
使用 fastboot set_active
指令或啟動控制 HAL setActiveBootSlot
指令設定目前的插槽時,系統啟動載入程式應更新目前的插槽、清除 slot-unbootable
和 slot-successful
,並重設重試計數 (這是清除 slot-unbootable
的唯一方法)。
未安裝 A/B 更新的裝置
如要在不使用 A/B 更新的裝置上支援 OTA 更新 (請參閱「不支援 A/B 更新的裝置」),請確認裝置的引導程式符合下列條件。
recovery
分區應包含圖片,能夠從某些支援的分區 (cache
、userdata
) 讀取系統圖片,並將圖片寫入system
分區。系統啟動載入程式應支援直接啟動至復原模式的程序。
如果支援無線電圖像更新功能,
recovery
分割區也應可刷新無線電。可透過以下其中一種方式完成:系統啟動載入程式會刷新無線電。在這種情況下,您應該可以從復原分割區重新啟動至系統啟動載入程式,以便完成更新。
復原映像檔會閃爍無線電。這項功能可做為二進位程式庫或公用程式提供。