如要實作無線 (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
系統啟動載入程式必須支援 boot_control
HAL,如 hardware/libhardware/include/hardware/boot_control.h
中所定義。更新程式會查詢開機控制 HAL、更新未使用的開機插槽、使用 HAL 變更有效插槽,然後重新啟動至更新後的作業系統。詳情請參閱「實作啟動控制 HAL」。
支援插槽
開機載入程式必須支援與分割區和插槽相關的功能,包括:
分割區名稱必須包含後置字元,用來識別哪些分割區屬於開機載入程式中的特定插槽。每個這類分割區都有對應的變數
has-slot:partition base name
,值為yes
。預約時段會依字母順序命名為 a、b、c 等,對應至以_a
、_b
、_c
等為字尾的分割區。開機載入程式應使用androidboot.slot_suffix
指令列屬性,告知作業系統啟動的預約時段。對於搭載 Android 12 以上版本的裝置,這項屬性會透過啟動設定設定。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
。
執行任何 flash 指令時,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
分區也應能刷入無線電。您可以透過下列任一方式達成此目的:系統啟動載入程式會刷入無線電。在這種情況下,應該可以從復原磁碟分割區重新啟動至系統啟動載入程式,完成更新。
復原映像檔會刷寫無線電。這項功能可以二進位程式庫或公用程式的形式提供。