In Android 12, la funzionalità bootconfig sostituisce le opzioni androidboot.*
cmdline del kernel in uso con Android 11 e versioni precedenti. La funzionalità bootconfig è un meccanismo per trasmettere dettagli di configurazione dalla build e dal bootloader ad Android 12.
Questa funzionalità consente di separare i parametri di configurazione per Android
di quelle del kernel. Spostare i lunghi parametri del kernel androidboot.*
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: kernel 12-5.4.xx
Implementa la funzionalità bootconfig per i nuovi dispositivi che vengono lanciati con una versione 12-5.10.xx alla versione kernel. 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 da quello della cmdline del kernel utilizzata 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, consulta l'implementazione del bootloader di riferimento U-boot di Cuttlefish. Nel riferimento sono elencati due commit. La prima uprevs supporta la versione del header di avvio alla versione più recente. Nell'esempio, il primo commit aggiorna (o esegue l'uprev) il supporto della versione alla successiva, la v4. Il secondo fa due cose: aggiunge la gestione del bootconfig e mostra l'aggiunta di parametri in fase di esecuzione:
- Esegui l'upgrade del supporto della versione dell'intestazione di avvio alla versione 4 più recente dell'audiodescrizione.
- Aggiungi la gestione di bootconfig.
Esempio di build
Per un esempio di build che mostra mkbootimg
modifiche per creare
vendor_boot.img
con intestazione di avvio del fornitore v4, vedi mkbootimg changes for
bootconfig
.
Guarda le modifiche alla Seppia per:
- Utilizzare (o eseguire l'uprev della) versione dell'intestazione di avvio del fornitore v4.
- Aggiungi bootconfig al cmdline del kernel e sposta i parametri selezionati in bootconfig.
Implementazione
I partner devono aggiungere il supporto ai propri bootloader e trasferire la data e l'ora di build
Parametri androidboot.*
dalla cmdline del kernel a 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 hai apportato modifiche che cercano i parametri androidboot.*
nel file /proc/cmdline, indirizzali al file /proc/bootconfig
. Le proprietà ro.boot.*
vengono impostate con i nuovi valori bootconfig
, quindi non è necessario apportare modifiche al codice che utilizza queste proprietà.
Modifiche alla compilazione
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
nella sezione bootconfig:
BOARD_KERNEL_CMDLINE += bootconfig
I parametri bootconfig vengono creati dai parametri in
BOARD_BOOTCONFIG
, un po' come la variabile kernel cmdline creata
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. Il kernel
configurazione di avvio
cerca la sezione bootconfig e cerca che si trovi alla fine
initramfs,
con il trailer previsto.
Il bootloader riceve le informazioni sul layout vendor_boot.img
dal fornitore
dell'immagine di avvio.
Figura 1. Allocazione della memoria del file bootconfig di Android 12
Il bootloader crea la sezione bootconfig in memoria. La sezione bootconfig contiene allocazioni di memoria per:
- Parametri
- 4 dimensione B
parameters size
- Taglia 4 B
parameters checksum
- Stringa magica bootconfig di 12 B (
#BOOTCONFIG\n
)
I parametri provengono da due origini: parametri noti al momento della build e non noti al momento della creazione. È necessario aggiungere parametri sconosciuti.
I parametri noti al momento della build vengono raggruppati nella fine di vendor_boot
nella sezione bootconfig. Le dimensioni della sezione vengono memorizzate (come byte)
nel campo dell'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 nella bootloader. Questi devono essere aggiunti alla fine della sezione dei parametri di bootconfig prima dell'applicazione del trailer di bootconfig.
Se devi aggiungere parametri dopo l'applicazione del trailer di bootconfig, sovrascrivere il trailer e applicarlo di nuovo.
Implementazione e convalida incrementali
Implementa la funzionalità bootconfig in modo incrementale seguendo la procedura indicata in questa sezione. Lascia invariati i parametri cmdline del kernel mentre vengono aggiunti i parametri 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:
- Utilizza la variabile
BOARD_BOOTCONFIG
per aggiungere una nuova bootconfig . - Mantieni invariati i parametri cmdline del kernel in modo che il dispositivo possa continuare ad avviarsi correttamente. Ciò rende il debug e la convalida molto è più facile.
- Utilizza la variabile
- Verifica il tuo lavoro controllando i contenuti di
/proc/bootconfig
. Verifica il parametro appena aggiunto viene visualizzato 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 si trovano in/proc/cmdline
. Se puoi verificarlo, la tua implementazione è andata a buon fine.
Considerazioni sull'upgrade e il downgrade delle agenzie di viaggi online
Quando gestisci upgrade e downgrade OTA tra versioni diverse di Android o versioni diverse del kernel, devi prestare particolare attenzione.
Android 12 è la prima versione con il supporto di bootconfig. In caso di downgrade a una versione precedente, i parametri cmdline del kernel al posto di bootconfig.
Le versioni del kernel 12-5.4 e successive supportano bootconfig. Se esegui il downgrade a una versione precedente (inclusa 11-5.4), devono essere utilizzati 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 cmdline del kernel. Lo stesso vale per l'upgrade delle versioni del kernel.
Risoluzione dei problemi
Quando esegui il passaggio di verifica, se non vedi i parametri previsti in /proc/bootconfig
, controlla i log del kernel in logcat
. C'è sempre un diario
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 del bootconfig. Per visualizzare i diversi tipi di errori, consulta init/main.c.