Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

恢復映像

在非A / B設備上,恢復映像應包含來自設備樹Blob(DTB)高級配置和電源接口(ACPI)覆蓋映像的信息。當此類設備啟動進入恢復狀態時,引導加載程序便可以加載與恢復映像兼容的覆蓋映像。支持A / B(無縫)更新的設備應使用恢復作為引導,而不是單獨的恢復分區(有關詳細信息,請參閱實施A / B更新)。

在Android版本之間,將恢復DTBO / ACPIO作為啟動/恢復映像的一部分的選項有所不同。

釋放更新方案符合GKI引導頭版本(啟動設備)引導頭版本(升級設備)需要專用的恢復映像
11 A / B,
虛擬A / B
3 *不適用沒有
A / B,
虛擬A / B
沒有2 3 0、1、2、3沒有
非A / B3不適用
非A / B沒有2 3 0、1、2、3
10(問) A / B不適用2 0、1、2沒有
非A / B不適用2 0、1、2
9(P) A / B不適用1個0,1沒有
非A / B不適用1個0,1
8(O) A / B不適用不適用(考慮為0)不適用(考慮為0)沒有
非A / B不適用不適用(考慮為0)不適用(考慮為0)

*運行Android 11或更高版本並使用通用內核映像(GKI)的A / B設備必須使用主引導頭版本3才能與供應商引導分區兼容。

關鍵點:

  • A / B設備無需指定恢復映像,因為A / B更新使用兩組分區(包括bootdtbo )並在更新期間在它們之間切換,從而無需恢復映像。如果需要,A / B設備仍可以使用專用的恢復映像。

  • 使用Android 11或更高版本啟動並使用引導標頭版本3的非A / B設備必須分別為恢復映像指定2的引導標頭版本2 。例如:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • 對於不支持設備樹的體系結構,恢復映像可以包括ACPIO映像而不是DTBO映像。

關於OTA故障和恢復映像

為了防止非A / B設備上的無線(OTA)故障,恢復映像應該是自給自足的,並且與其他映像無關。在OTA更新期間,如果在更新覆蓋圖像之後(但在完成完整更新之前)出現問題,則設備將嘗試啟動進入恢復模式以完成OTA更新。但是,由於覆蓋分區已被更新,因此恢復映像(尚未更新)可能會發生不匹配。

為了防止更新期間恢復依賴於DTBO / ACPIO分區,運行Android 9或更高版本的非A / B設備可以將恢復DTBO / ACPIO映像指定為引導映像格式的單獨部分,其中包含來自覆蓋映像的信息作為單獨的部分(必須使用引導頭版本1或2)。

引導映像更改

要在運行Android 9或更高版本的非A / B設備上允許恢復映像包含恢復DTBO或ACPIO,請按以下方式更新引導映像結構。

引導映像部分頁數
引導頭(1頁) 1個
內核(l頁) l =( kernel_size + page_size -1)/ page_size
Ramdisk(米頁) m =( ramdisk_size + page_size -1)/ page_size
第二階段引導程序(n頁) n =( second_size + page_size -1)/ page_size
恢復DTBO或ACPIO(o頁) o =( recovery_[dtbo|acpio]_size + page_size -1)/ page_size

有關用於指定引導映像頭版本和覆蓋映像路徑的mkbootimg工具參數的詳細信息,請參見“引導映像頭版本控制”

實施DTBO

運行9或更高版本的非A / B設備可以填充恢復映像的recovery_dtbo部分。以包括recovery_dtbo在圖像recovery.img ,在該裝置BoardConfig.mk

  • 將配置BOARD_INCLUDE_RECOVERY_DTBO設置為true

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • 擴展BOARD_MKBOOTIMG_ARGS變量以指定啟動映像頭版本:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • 確保將BOARD_PREBUILT_DTBOIMAGE變量設置為DTBO圖像的路徑。 Android構建系統在創建恢復映像期間使用變量來設置mkbootimg工具的recovery_dtbo參數。

如果BOARD_INCLUDE_RECOVERY_DTBOBOARD_MKBOOTIMG_ARGS ,和BOARD_PREBUILT_DTBOIMAGE變量設置正確,Android編譯系統包括DTBO指定由BOARD_PREBUILT_DTBOIMAGE在可變recovery.img

實施ACPIO

運行Android 9或更高版本的非A / B設備可以使用ACPIO覆蓋映像(而不是DTBO映像),並且可以填充recovery_acpio映像的recovery_acpio部分(而不是recovery_dtbo部分)。以包括recovery_acpio在圖像recovery.img ,在該裝置BoardConfig.mk

  • 將配置BOARD_INCLUDE_RECOVERY_ACPIO設置為true

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • 擴展BOARD_MKBOOTIMG_ARGS變量以指定啟動映像頭版本。該變量必須大於或等於1以支持恢復ACPIO。

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • 確保將BOARD_RECOVERY_ACPIO變量設置為ACPIO映像的路徑。 Android構建系統使用該變量在創建恢復映像期間設置mkbootimg工具的recovery_acpio參數。

如果BOARD_INCLUDE_RECOVERY_ACPIOBOARD_MKBOOTIMG_ARGS ,和BOARD_RECOVERY_ACPIO變量設置正確,Android編譯系統包括ACPIO指定由BOARD_RECOVERY_ACPIO在可變recovery.img