Sui dispositivi non A/B, l'immagine di ripristino deve contenere informazioni provenienti da un blob dell'albero dei dispositivi (DTB) o da un'immagine di overlay Advanced Configuration and Power Interface (ACPI). Quando questi dispositivi si avviano in modalità di ripristino, il bootloader può caricare l'immagine overlay compatibile con l'immagine di ripristino. I dispositivi che supportano gli aggiornamenti A/B (senza interruzioni) devono utilizzare il ripristino come avvio anziché una partizione di ripristino separata (per i dettagli, vedi Implementazione degli aggiornamenti A/B).
Le opzioni per includere un DTBO/ACPIO di recupero come parte dell'immagine di avvio/recupero variano a seconda delle release di Android.
| Release | Aggiorna schema | Conformità GKI | Versione dell'intestazione di avvio (dispositivi di lancio) | Versione dell'intestazione di avvio (dispositivi in fase di upgrade) | Immagine di ripristino dedicata obbligatoria |
|---|---|---|---|---|---|
| 11 | A/B, Virtual A/B |
Sì | 3* | N/D | No |
| A/B, Virtual A/B |
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 (Q) | 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ì |
* I dispositivi A/B con Android 11 o versioni successive e che utilizzano l'immagine generica del kernel (GKI) devono utilizzare una versione dell'intestazione di avvio principale 3 per essere compatibili con la partizione di avvio del fornitore.
Punti chiave:
I dispositivi A/B non devono specificare un'immagine di ripristino perché gli aggiornamenti A/B utilizzano due set di partizioni (incluse
bootedtbo) e passano da una all'altra durante gli aggiornamenti, eliminando la necessità di un'immagine di ripristino. I dispositivi A/B possono comunque utilizzare un'immagine di ripristino dedicata.I dispositivi non A/B che vengono 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 ripristino separatamente. Ad esempio:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2Per le architetture che non supportano gli alberi dei 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) sui dispositivi non A/B, l'immagine di ripristino deve essere autosufficiente e indipendente dalle altre immagini. Durante un aggiornamento OTA, se si verifica un problema dopo l'aggiornamento dell'immagine 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 di overlay è già stata aggiornata, potrebbe verificarsi una mancata corrispondenza con l'immagine di ripristino (che non è ancora stata 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 informazioni dell'immagine di overlay come sezione separata nel formato dell'immagine di avvio (deve utilizzare una versione dell'intestazione di avvio 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, aggiorna 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 seconda fase (n pagine) | n = (second_size + page_size -
1) / page_size |
| DTBO o ACPIO (o pagine) di ripristino | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
Per informazioni dettagliate sugli argomenti dello strumento mkbootimg per specificare la versione dell'intestazione dell'immagine di avvio e i percorsi delle immagini di overlay, consulta Controllo delle versioni dell'intestazione dell'immagine di avvio.
Implementare DTBO
I dispositivi non A/B con Android 9 o versioni successive possono compilare la sezione
recovery_dtbo dell'immagine di ripristino. Per includere l'immagine di recovery_dtbo
in recovery.img, nel dispositivo BoardConfig.mk:
Imposta la configurazione
BOARD_INCLUDE_RECOVERY_DTBOsutrue:BOARD_INCLUDE_RECOVERY_DTBO := trueEstendi la variabile
BOARD_MKBOOTIMG_ARGSper specificare la versione dell'intestazione dell'immagine di avvio: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_DTBOIMAGEsia impostata sul percorso dell'immagine DTBO. Il sistema di compilazione Android utilizza la variabile per impostare l'argomentorecovery_dtbodello strumentomkbootimgdurante la creazione dell'immagine di ripristino.
Se le variabili BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS e
BOARD_PREBUILT_DTBOIMAGE sono impostate correttamente, il sistema di build di 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 di 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_ACPIOsutrue:BOARD_INCLUDE_RECOVERY_ACPIO := trueEstendi la variabile
BOARD_MKBOOTIMG_ARGSper specificare la versione dell'intestazione dell'immagine di avvio. 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_ACPIOsia impostata sul percorso dell'immagine ACPIO. Il sistema di compilazione Android utilizza la variabile per impostare l'argomentorecovery_acpiodello strumentomkbootimgdurante la creazione dell'immagine di ripristino.
Se le variabili BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS e
BOARD_RECOVERY_ACPIO sono impostate correttamente, il sistema di compilazione Android
include ACPIO specificato dalla variabile BOARD_RECOVERY_ACPIO in
recovery.img.