In Android 12, la funzionalità bootconfig sostituisce le opzioni cmdline del kernel androidboot.*
in uso con Android 11 e versioni precedenti. La funzionalità bootconfig è un meccanismo per passare
i dettagli di configurazione dalla build e dal bootloader ad Android 12.
Questa funzionalità fornisce un modo per separare i parametri di configurazione per lo spazio utente
Android da quelli del kernel. Lo spostamento di parametri del kernel androidboot.*
lunghi
nel file bootconfig crea spazio nella cmdline del kernel e lo rende
disponibile per l'espansione futura.
Sia il kernel che lo spazio utente Android devono supportare bootconfig
.
- Prima release con questo supporto: Android 12
- Prima versione del kernel con questo supporto: 12-5.4.xx kernel
Implementare la funzionalità bootconfig per i nuovi dispositivi che vengono lanciati con una versione kernel 12-5.10.xx. Non è necessario implementarla se esegui l'upgrade dei dispositivi.
Esempi e fonte
Quando visualizzi gli esempi e il codice sorgente in questa sezione, tieni presente che il formato
del codice bootconfig
è solo leggermente diverso dal formato
del kernel cmdline utilizzato in Android 11 e versioni precedenti.
Tuttavia, la seguente differenza è importante per il tuo utilizzo:
- I parametri devono essere separati dalla sequenza di escape di nuova riga
\n
, non da spazi.
Esempio di bootloader
Per un esempio di bootloader, vedi l'implementazione del bootloader di riferimento di Cuttlefish U-boot. Nel riferimento sono elencati due commit. Il primo upgrade del supporto dell'intestazione di avvio alla versione più recente. Nell'esempio, il primo commit aggiorna (o incrementa il supporto della versione) alla successiva, v4. Il secondo esegue due operazioni: aggiunge la gestione del bootconfig e mostra l'aggiunta di parametri in fase di runtime:
- Esegui l'upgrade del supporto della versione dell'intestazione di avvio alla versione v4 più recente.
- Aggiungi la gestione del bootconfig.
Esempio di build
Per un esempio di build che mostra le modifiche mkbootimg
per la creazione di
vendor_boot.img
con intestazione di avvio del fornitore v4, consulta mkbootimg changes for
bootconfig
.
Guarda le modifiche alla Seppia per:
- Utilizza (o esegui l'upscaling) della versione v4 dell'intestazione di avvio del fornitore.
- Aggiungi bootconfig alla cmdline del kernel e sposta i parametri selezionati in bootconfig.
Implementazione
I partner devono aggiungere supporto ai propri bootloader e spostare i parametri androidboot.*
in fase di build dalla cmdline del kernel al file bootconfig. Il modo migliore per implementare questa modifica è farlo in modo incrementale; consulta la sezione Implementazione e convalida incrementali per informazioni su come seguire un processo incrementale.
Se esistono modifiche che cercano i parametri androidboot.*
nel file /proc/cmdline, punta al file /proc/bootconfig
. Le proprietà ro.boot.*
sono impostate con i nuovi valori bootconfig
, quindi non devi apportare
modifiche al codice che utilizza queste proprietà.
Modifiche build
Innanzitutto, esegui l'upgrade della versione dell'intestazione di avvio alla versione 4:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
Aggiungi il parametro cmdline del kernel bootconfig
. Questo fa sì che il kernel cerchi
la sezione bootconfig:
BOARD_KERNEL_CMDLINE += bootconfig
I parametri bootconfig vengono creati dai parametri nella variabile BOARD_BOOTCONFIG
, proprio come il kernel cmdline viene creato da BOARD\_KERNEL\_CMDLINE
.
Tutti i parametri androidboot.*
possono essere spostati così come sono, in modo simile a quanto segue:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Modifiche del bootloader
Il bootloader configura initramfs
prima di passare al kernel. La configurazione di avvio del kernel
cerca la sezione bootconfig e cerca che si trovi alla fine di
initramfs,
con il trailer previsto.
Il bootloader riceve le informazioni sul layout vendor_boot.img
dall'intestazione
dell'immagine di avvio del fornitore.
Figura 1. Allocazione della memoria bootconfig per Android 12
Il bootloader crea la sezione bootconfig in memoria. La sezione bootconfig contiene allocazioni di memoria per:
- Parametri
- 4 dimensione B
parameters size
- 4 dimensione B
parameters checksum
- Stringa magica bootconfig da 12 B (
#BOOTCONFIG\n
)
I parametri provengono da due origini: parametri noti al momento della build e parametri che non sono noti al momento della build. È necessario aggiungere parametri sconosciuti.
I parametri noti al momento della build vengono pacchettizzati alla fine dell'immagine vendor_boot
nella sezione bootconfig. La dimensione della sezione è archiviata (come byte) nel campo di intestazione di avvio del fornitore vendor_bootconfig_size
.
I parametri che non sono noti al momento della build sono noti solo in fase di runtime nel bootloader. Devono essere aggiunti alla fine della sezione dei parametri bootconfig prima dell'applicazione del trailer di bootconfig.
Se devi aggiungere parametri dopo l'applicazione del trailer bootconfig, sovrascrivi il trailer e applicalo di nuovo.
Implementazione e convalida incrementali
Implementa la funzionalità bootconfig in modo incrementale seguendo la procedura descritta in questa sezione. Lascia invariati i parametri cmdline del kernel mentre vengono aggiunti i parametri di bootconfig.
Di seguito sono riportati i passaggi per un'implementazione incrementale, con convalida:
- Apporta il bootloader e le modifiche alla build, quindi segui questi passaggi:
- Usa la variabile
BOARD_BOOTCONFIG
per aggiungere un nuovo parametro bootconfig. - Mantieni i parametri cmdline del kernel così come sono, in modo che il dispositivo possa continuare ad avviarsi correttamente. Ciò rende il debug e la convalida molto più semplici.
- Usa la variabile
- Verifica il tuo lavoro controllando i contenuti di
/proc/bootconfig
. Verifica di vedere il parametro appena aggiunto dopo l'avvio del dispositivo. - Sposta i parametri
androidboot.*
dalla cmdline del kernel a bootconfig utilizzando la variabileBOARD_BOOTCONFIG
e il bootloader. - Verifica che ciascuno dei parametri esista in
/proc/bootconfig
E che non siano in/proc/cmdline
. Se puoi verificare, l'implementazione è riuscita.
Considerazioni sull'upgrade e il downgrade delle agenzie di viaggi online
Quando gestisci upgrade e downgrade OTA tra diverse versioni di Android o versioni del kernel diverse, devi prestare particolare attenzione.
Android 12 è la prima versione con supporto bootconfig. In caso di downgrade a una versione precedente, è necessario utilizzare i parametri cmdline del kernel al posto di bootconfig.
Le versioni 12-5.4 e successive del kernel supportano bootconfig. Se esegui il downgrade a una versione precedente(inclusa la 11-5.4), devi utilizzare i parametri cmdline del kernel.
Gli upgrade da Android 11 e versioni precedenti ad Android 12 e versioni successive possono continuare a utilizzare i parametri kernel cmdline. Lo stesso vale per l'upgrade delle versioni del kernel.
Risoluzione dei problemi
Quando esegui il passaggio verify, se non vedi i parametri previsti in /proc/bootconfig
, controlla i log del kernel in logcat
. C'è sempre una voce di log per bootconfig,
se il kernel la supporta.
Output log di esempio
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Se viene restituito un log degli errori, significa che si è verificato un problema durante il caricamento di bootconfig. Per vedere diversi tipi di errore, visualizza init/main.c.