Esegui il monitoraggio ABI

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.