Sui dispositivi non A/B, l'immagine di ripristino deve contenere informazioni provenienti da un BLOB BOB (Device Tree blob) 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'ambito dell'avvio/ripristino l'immagine differisce 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 |
Sì | 3* | N/D | No |
A/B, A/B virtuale |
No | 2, 3 | 0, 1, 2, 3 | No | |
non A/B | Sì | 3 | N/D | Sì | |
non A/B | No | 2, 3 | 0, 1, 2, 3 | Sì | |
10 (T) | A/B | N/D | 2 | 0, 1, 2 | No |
non A/B | N/D | 2 | 0, 1, 2 | Sì | |
9 (R) | A/B | N/D | 1 | 0, 1 | No |
non A/B | N/D | 1 | 0, 1 | Sì | |
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) | Sì |
* Dispositivi A/B con Android Versione 11 o successiva e utilizzando Generic Kernel Image (GKI) deve utilizzare un oggetto principale dell'intestazione di avvio 3 in modo che sia compatibili con l'avvio del fornitore di archiviazione.
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
edtbo
) e passa da una all'altra durante degli aggiornamenti, eliminando la necessità di avere un'immagine di ripristino. I dispositivi A/B possono utilizza comunque un'immagine di ripristino dedicata.I dispositivi non A/B verranno lanciati con Android 11 o versioni successive Se utilizzi una versione 3 dell'intestazione di avvio, devi specificare in modo esplicito un'intestazione di avvio versione 2 per l'immagine di ripristino. Ad esempio:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Per le architetture che non supportano la struttura ad albero dei dispositivi, l'immagine di ripristino può includi 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 di overlay (ma prima del completare l'aggiornamento completo), il dispositivo prova ad avviarsi in modalità di ripristino per completare l'aggiornamento OTA. Tuttavia, poiché la partizione overlay è già stata aggiornata, è possibile che si verifichi una mancata corrispondenza con l'immagine di ripristino (che non è stata aggiornate).
Per impedire il ripristino a seconda della partizione DTBO/ACPIO durante una aggiornare i dispositivi non A/B con Android 9 o versioni successive è possibile specificare un'immagine DTBO/ACPIO di ripristino contenente informazioni dall'overlay l'immagine come sezione separata nel formato dell'immagine di avvio (è necessario utilizzare un'intestazione di avvio versione 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 (l pagine) | l = (kernel_size + page_size -
1) / page_size |
Ramdisk (m pagine) | m = (ramdisk_size + page_size -
1) / page_size |
Bootloader di seconda fase (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.
Implementa 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
sutrue
: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 di Immagine DTBO. Il sistema di compilazione Android utilizza la variabile per impostarerecovery_dtbo
dello strumentomkbootimg
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
È possibile usare i dispositivi non A/B con Android 9 o versioni successive
un'immagine overlay ACPIO (invece di un'immagine DTBO) e può completare il
recovery_acpio
(anziché la sezione recovery_dtbo
) di
immagine di ripristino. Per includere l'immagine recovery_acpio
in recovery.img
, negli
dispositivo BoardConfig.mk
:
Imposta la configurazione
BOARD_INCLUDE_RECOVERY_ACPIO
sutrue
: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 ACPIOBOARD_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 compilazione Android utilizza la variabile per impostarerecovery_acpio
dello strumentomkbootimg
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
.