Immagini di ripristino

Sui dispositivi non A/B, l'immagine di ripristino deve contenere informazioni provenienti da un device BLOB (DTB) oppure Configurazione avanzata e interfaccia di alimentazione (ACPI). Quando tale il dispositivo avvia il ripristino, il bootloader può quindi caricare l'immagine overlay sia compatibile con l'immagine di ripristino. Dispositivi che supportano il formato A/B (seamless) aggiornamenti dovrebbero utilizzare il ripristino come avvio anziché un una partizione di ripristino separata (per maggiori dettagli, consulta Implementazione di A/B Aggiornamenti).

Le opzioni per includere un DTBO/ACPIO di recupero nell'immagine di avvio/recupero differiscono tra le release di Android.

Release Aggiorna schema Conformità GKI Versione intestazione di avvio (avvio dei dispositivi) Versione intestazione di avvio (upgrade dei dispositivi) Immagine di ripristino dedicata obbligatoria
11 A/B,
A/B virtuale
3* N/D No
A/B,
A/B virtuale
No 2, 3 0, 1, 2, 3 No
non A/B 3 N/D
non A/B No 2, 3 0, 1, 2, 3
10 (T) A/B N/D 2 0, 1, 2 No
non A/B N/D 2 0, 1, 2
9 (R) A/B N/D 1 0, 1 No
non A/B N/D 1 0, 1
8 (O) A/B N/D N/A (considerato 0) N/A (considerato 0) No
non A/B N/D N/A (considerato 0) N/A (considerato 0)

* I dispositivi A/B con Android 11 o versioni successive e che utilizzano l'immagine del kernel generico (GKI) devono utilizzare una versione dell'intestazione di avvio principale di 3 per essere compatibili con la partizione di avvio del fornitore.

Punti chiave:

  • Sui dispositivi A/B non è necessario specificare un'immagine di ripristino perché gli aggiornamenti A/B utilizzano due set di partizioni (inclusi boot e dtbo) e passa da una all'altra durante degli aggiornamenti, eliminando la necessità di avere un'immagine di ripristino. I dispositivi A/B possono ancora utilizzare un'immagine di ripristino dedicata.

  • I dispositivi non A/B lanciati con Android 11 o versioni successive e che utilizzano una versione dell'intestazione di avvio 3 devono specificare esplicitamente una versione dell'intestazione di avvio 2 per l'immagine di recupero separatamente. Ad esempio:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Per le architetture che non supportano gli alberi di dispositivi, l'immagine di ripristino può includere un'immagine ACPIO anziché un'immagine DTBO.

Informazioni sugli errori OTA e sulle immagini di ripristino

Per evitare errori over-the-air (OTA) su dispositivi non A/B, l'immagine di ripristino dovrebbe essere autosufficiente e indipendente dalle altre immagini. Durante un aggiornamento OTA, se si verifica un problema dopo l'aggiornamento dell'immagine in overlay (ma prima del completamento dell'aggiornamento completo), il dispositivo tenta di avviarsi in modalità di ripristino per completare l'aggiornamento OTA. Tuttavia, poiché la partizione overlay è già stata aggiornata, potrebbe verificarsi una mancata corrispondenza con l'immagine di ripristino (che non è stata ancora aggiornata).

Per evitare che il recupero dipenda dalla partizione DTBO/ACPIO durante un update, i dispositivi non A/B con Android 9 o versioni successive possono specificare un'immagine DTBO/ACPIO di recupero contenente le informazioni dell'immagine in overlay come sezione separata nel formato dell'immagine di avvio (deve essere utilizzata una versione del header di avvio 1 o 2).

Modifiche all'immagine di avvio

Consentire all'immagine di ripristino di contenere il file DTBO o ACPIO di ripristino su dispositivi non A/B dispositivi con Android 9 o versioni successive, aggiorna l'avvio dell'immagine come segue.

Sezione Immagine di avvio Numero di pagine
Intestazione di avvio (1 pagina) 1
Kernel (pagine L) l = (kernel_size + page_size - 1) / page_size
Ramdisk (m pagine) m = (ramdisk_size + page_size - 1) / page_size
Bootloader di secondo livello (n pagine) n = (second_size + page_size - 1) / page_size
Recupero DTBO o ACPIO (o pagine) o = (recovery_[dtbo|acpio]_size + page_size - 1) / page_size

Per dettagli sugli argomenti dello strumento mkbootimg per specificare l'immagine di avvio versione intestazione e percorsi immagine overlay; consulta Intestazione immagine di avvio Controllo delle versioni.

Implementare DTBO

I dispositivi non A/B con versione 9 o successive possono compilare il Sezione recovery_dtbo dell'immagine di ripristino. Per includere recovery_dtbo immagine in recovery.img, nel dispositivo BoardConfig.mk:

  • Imposta la configurazione BOARD_INCLUDE_RECOVERY_DTBO su true:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Estendi la variabile BOARD_MKBOOTIMG_ARGS per specificare l'intestazione dell'immagine di avvio versione:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Assicurati che la variabile BOARD_PREBUILT_DTBOIMAGE sia impostata sul percorso dell'immagine DTBO. Il sistema di build Android utilizza la variabile per impostare l'argomento recovery_dtbo dello strumento mkbootimg durante la creazione dell'elemento immagine di ripristino.

Se BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS e Le variabili BOARD_PREBUILT_DTBOIMAGE sono impostate correttamente, il sistema di build Android include il DTBO specificato dalla variabile BOARD_PREBUILT_DTBOIMAGE in recovery.img.

Implementare ACPIO

I dispositivi non A/B con Android 9 o versioni successive possono utilizzare un'immagine in overlay ACPIO (anziché un'immagine DTBO) e possono compilare la sezione recovery_acpio (anziché la sezione recovery_dtbo) dell'immagine di ripristino. Per includere l'immagine recovery_acpio in recovery.img, nel dispositivo BoardConfig.mk:

  • Imposta la configurazione BOARD_INCLUDE_RECOVERY_ACPIO su true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Estendi la variabile BOARD_MKBOOTIMG_ARGS per specificare l'intestazione dell'immagine di avvio completamente gestita. La variabile deve essere maggiore o uguale a 1 per supportare il recupero ACPIO

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Assicurati che la variabile BOARD_RECOVERY_ACPIO sia impostata sul percorso di immagine ACPIO. Il sistema di build Android utilizza la variabile per impostare recovery_acpio dello strumento mkbootimg durante la creazione dell'argomento immagine di ripristino.

Se BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS e Le variabili BOARD_RECOVERY_ACPIO sono impostate correttamente, il sistema di build Android include l'ACPIO specificato dalla variabile BOARD_RECOVERY_ACPIO in recovery.img.