Questa pagina descrive come creare rappresentazioni dell'ABI del kernel Android ed eseguire il monitoraggio dell'ABI. Si applica ad Android 16 e versioni successive. Per le versioni precedenti, consulta Monitoraggio dell'ABI delle versioni precedenti del kernel.
Consulta anche la documentazione di riferimento per Kleaf: Supporto del monitoraggio ABI (GKI) e Supporto del monitoraggio ABI (dispositivo).
Crea il kernel e la relativa rappresentazione ABI
Dopo aver scaricato le origini GKI, esegui questo comando per creare il kernel GKI e gli artefatti ABI:
tools/bazel run //common:kernel_aarch64_abi_dist
Questo comando crea la rappresentazione ABI corrente e la copia in
$DIST_DIR/abi.stg
insieme al kernel e ai moduli creati. $DIST_DIR
Il valore predefinito è out_abi/kernel_aarch64_abi_dist/dist
.
Puoi specificare argomenti aggiuntivi per gli strumenti ABI alla fine del comando
dopo --
. Ad esempio, per modificare la destinazione per ABI e artefatti di build, puoi
utilizzare l'opzione --destdir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
Analizzare le differenze ABI tra la build e una rappresentazione di riferimento
Il target //common:kernel_aarch64_abi_dist
, eseguito nel comando precedente, analizza e segnala eventuali differenze ABI riscontrate tra la build e la rappresentazione di riferimento che si trova in common/gki/aarch64/abi.stg
(definita in BUILD.bazel
). Queste differenze vengono stampate alla fine della build, come mostrato nell'esempio seguente:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
Il report stampato proviene dall'artefatto di build che si trova in
$DIST_DIR/abi_stgdiff/abi.report.short
insieme ai report in altri formati.
L'automazione deve utilizzare il codice di uscita del comando di build, che è diverso da zero se vengono rilevate differenze.
Tieni presente che i rami della
fase di sviluppo, tra cui android-mainline
, non hanno una rappresentazione ABI di riferimento.
Senza, //common:kernel_aarch64_abi_dist
non rileverà alcuna differenza.
Aggiorna la rappresentazione ABI di riferimento
Qualsiasi modifica che influisce sull'ABI del kernel, ad esempio un
aggiornamento dell'elenco dei simboli,
deve essere riportata nella rappresentazione dell'ABI di riferimento
(common/gki/aarch64/abi.stg
, definita in
BUILD.bazel).
Per farlo, esegui questo comando:
tools/bazel run //common:kernel_aarch64_abi_update
Questo comando esegue tutte le operazioni del passaggio
Analizza le differenze ABI e aggiorna inoltre la
rappresentazione di riferimento nelle origini. L'ABI aggiornata può essere caricata
nello stesso commit della modifica. Includi le differenze ABI rispetto al
report in $DIST_DIR/abi_stgdiff/abi.report.short
nel messaggio di commit.
Monitoraggio ABI e target dei dispositivi
Il monitoraggio dell'ABI deve essere configurato solo per i target di compilazione del kernel principale. Le configurazioni di build miste (quelle che definiscono base_kernel
) che vengono compilate direttamente con il kernel GKI devono solo aggiungere il supporto per il monitoraggio dell'elenco dei simboli del dispositivo.
La definizione ABI deve essere aggiornata utilizzando la build GKI.
Consulta anche la documentazione di riferimento per Kleaf: Support ABI monitoring (Dispositivo).
Monitorare le versioni precedenti del kernel ABI (Android 15 e versioni precedenti)
Per le versioni precedenti del kernel, le istruzioni di build e monitoraggio dell'ABI sono diverse come segue.
Android 15 e 14
Le istruzioni sono per lo più le stesse di Android 16,
tranne per il fatto che la rappresentazione ABI di riferimento è
common/android/abi_gki_aarch64.stg
e $DIST_DIR
il valore predefinito è out_abi/kernel_aarch64/dist
.
Android 13
Android 13 può essere creato con Kleaf o con script di build legacy.
Per Kleaf, le istruzioni sono le stesse di Android 14, tranne per il fatto che il formato ABI
è XML e la rappresentazione ABI di riferimento è
common/android/abi_gki_aarch64.xml
.
Per gli script di build legacy, le istruzioni sono le stesse di Android 12.
Android 12 e versioni precedenti
Il formato ABI è XML e la rappresentazione ABI di riferimento è
common/android/abi_gki_aarch64.xml
Questi kernel utilizzano build.sh
anziché Kleaf. Per il monitoraggio dell'ABI devi utilizzare
build_abi.sh
, che accetta le stesse variabili di ambiente per personalizzare la
build di build.sh
. Ad esempio:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Viene creato il kernel e l'ABI viene estratta nella sottodirectory OUT_DIR
(out_abi
per impostazione predefinita) ed è equivalente al target //common:kernel_aarch64_abi_dist
di Kleaf (vedi Creare artefatti del kernel e dell'ABI).
La rappresentazione ABI di riferimento è archiviata in android/abi_gki_aarch64.xml
come
definito dalla variabile ABI_DEFINITION
in common/build.config.gki.aarch64
.
Se devi aggiornare la rappresentazione dell'ABI del kernel, il modo più comodo è
utilizzare le opzioni --update
e --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
stampa le differenze ABI tra il file esistente e un'ABI appena generata.
L'opzione --update
sovrascrive la rappresentazione dell'ABI di riferimento. Esegue anche
l'aggiornamento dell'elenco dei simboli
quando utilizzi BUILD_CONFIG
per un dispositivo con KMI_SYMBOL_LIST
configurato.