Immagini di recupero

Sui dispositivi B non-A /, l'immagine di ripristino deve contenere le informazioni da un albero dei dispositivi blob (DTB) o Advanced Configuration and Power Interface (ACPI) sovrapposizione di immagini. Quando tali dispositivi si avviano in modalità di ripristino, il bootloader può quindi caricare l'immagine di sovrapposizione compatibile con l'immagine di ripristino. I dispositivi che supportano A / B (senza soluzione di continuità) aggiornamenti dovrebbero usare recupero di avvio invece di una partizione di ripristino separata (per i dettagli, vedere Implementazione A / B Updates ).

Le opzioni per includere un DTBO/ACPIO di ripristino come parte dell'immagine di avvio/ripristino differiscono tra le versioni di Android.

Pubblicazione Schema di aggiornamento Conformità GKI Versione dell'intestazione di avvio (dispositivi di avvio) Versione dell'intestazione di avvio (aggiornamento dei dispositivi) È richiesta un'immagine di ripristino dedicata
11 A/B,
A/B Virtual virtuale
3 * N / A No
A/B,
A/B Virtual virtuale
No 2, 3 0, 1, 2, 3 No
non-A/B 3 N / A
non-A/B No 2, 3 0, 1, 2, 3
10 (Q) A/B N / A 2 0, 1, 2 No
non-A/B N / A 2 0, 1, 2
9 (P) A/B N / A 1 0, 1 No
non-A/B N / A 1 0, 1
8 (O) A/B N / A N/A (considerato 0) N/A (considerato 0) No
non-A/B N / A N/A (considerato 0) N/A (considerato 0)

* Dispositivi A / B con Android 11 o superiore e utilizzando il kernel generica immagine (GKI) deve utilizzare un primario versione intestazione taglio 3 per essere compatibile con la partizione di avvio fornitore .

Punti chiave:

  • A dispositivi / B non hanno bisogno di specificare un'immagine di recupero, come A / B aggiornamenti utilizzare due set di partizioni (compresi boot e dtbo ) e passare da uno all'altro durante gli aggiornamenti, eliminando la necessità di un'immagine di ripristino. Se lo si desidera, i dispositivi A/B possono comunque utilizzare un'immagine di ripristino dedicata.

  • Non-A / B dispositivi di lancio con Android 11 o superiore e utilizzando una versione di intestazione di avvio di 3 deve specificare in modo esplicito una versione intestazione di avvio del 2 per l'immagine di ripristino separatamente. Per esempio:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Per le architetture che non supportano le strutture ad albero dei dispositivi, l'immagine di ripristino può includere un'immagine ACPIO invece di un'immagine DTBO.

Informazioni sugli errori OTA e sulle immagini di ripristino

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

Per evitare che il ripristino dipenda dalla partizione DTBO/ACPIO durante un aggiornamento, i dispositivi non A/B con Android 9 o versioni successive possono specificare un'immagine DTBO/ACPIO di ripristino contenente le informazioni dall'immagine di sovrapposizione come una sezione separata nel formato dell'immagine di avvio ( deve utilizzare una versione dell'intestazione di avvio di 1 o 2).

Modifiche all'immagine di avvio

Per consentire all'immagine di ripristino di contenere il DTBO o l'ACPIO di ripristino su dispositivi non A/B con Android 9 o versioni successive, aggiornare la struttura dell'immagine di avvio come segue.

Sezione immagine di avvio Numero di pagine
Intestazione di avvio (1 pagina) 1
Kernel (l pagine) l = ( kernel_size + page_size - 1) / page_size
Ramdisk (m pagine) m = ( ramdisk_size + page_size - 1) / page_size
Bootloader di secondo stadio (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 i dettagli sulle mkbootimg argomenti strumento per specificare la versione di avvio di intestazione dell'immagine e percorsi delle immagini di sovrapposizione, vedi immagine di avvio di intestazione delle versioni .

Implementazione di DTBO

Non-A / B dispositivi in esecuzione 9 o superiore possono popolare il recovery_dtbo sezione della immagine di ripristino. Per includere il recovery_dtbo immagine in recovery.img , nel dispositivo BoardConfig.mk :

  • Impostare la configurazione BOARD_INCLUDE_RECOVERY_DTBO al true :

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Estendere il BOARD_MKBOOTIMG_ARGS variabile per specificare la versione di boot intestazione immagine:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Assicurarsi che il BOARD_PREBUILT_DTBOIMAGE variabile è impostato sul percorso dell'immagine DTBO. Il sistema di compilazione Android utilizza la variabile per impostare il recovery_dtbo argomento del mkbootimg dell'utensile durante la creazione dell'immagine di ripristino di.

Se i BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS , e BOARD_PREBUILT_DTBOIMAGE variabili sono impostate correttamente, il sistema di generazione Android include il DTBO specificata dalla BOARD_PREBUILT_DTBOIMAGE variabile recovery.img .

Implementazione di ACPIO

Non-A / B i dispositivi con sistema operativo Android 9 o superiore può utilizzare una sovrapposizione di immagini ACPIO (un'immagine DTBO anziché) e può popolare il recovery_acpio sezione (al posto del recovery_dtbo sezione) dell'immagine ripresa. Per includere il recovery_acpio immagine in recovery.img , nel dispositivo BoardConfig.mk :

  • Impostare la configurazione BOARD_INCLUDE_RECOVERY_ACPIO al true :

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Estendere il BOARD_MKBOOTIMG_ARGS variabile per specificare la versione di boot nell'intestazione dell'immagine. La variabile deve essere maggiore o uguale a 1 per supportare il ripristino ACPIO.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Assicurarsi che il BOARD_RECOVERY_ACPIO variabile è impostato sul percorso dell'immagine ACPIO. Il sistema di compilazione Android utilizza la variabile per impostare il recovery_acpio argomento del mkbootimg dell'utensile durante la creazione dell'immagine di ripristino.

Se i BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS e BOARD_RECOVERY_ACPIO variabili siano impostate correttamente, il sistema di generazione Android include l'ACPIO specificata dalla BOARD_RECOVERY_ACPIO variabile recovery.img .