Come eseguire il monitoraggio ABI

Questa sezione descrive come creare rappresentazioni ABI del kernel Android ed eseguire il monitoraggio ABI. È applicabile ad Android 14 e versioni successive. Per le versioni precedenti, fare riferimento a Versioni precedenti del kernel .

Consulta anche la documentazione di riferimento per Kleaf: Supporta il monitoraggio ABI (GKI) e Supporta il monitoraggio ABI (Dispositivo) .

Costruisci il kernel e la sua rappresentazione ABI

Dopo aver scaricato i sorgenti GKI, esegui il comando seguente 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 out_abi/kernel_aarch64/dist/abi.stg insieme al kernel e ai moduli creati.

È possibile specificare argomenti aggiuntivi per lo strumento ABI alla fine del comando dopo -- . Ad esempio, per modificare la destinazione dell'ABI e creare artefatti, puoi utilizzare l'opzione --dist_dir :

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=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 trovate tra la build e la rappresentazione di riferimento situata in common/android/abi_gki_aarch64.stg (definito in BUILD.bazel ). Queste differenze verranno stampate alla fine della compilazione, 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 situato in out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short insieme ai report in altri formati.

L'automazione dovrebbe utilizzare il codice di uscita del comando build, che sarà diverso da zero se vengono rilevate differenze.

Tieni presente che i rami della fase di sviluppo , incluso android-mainline , non hanno una rappresentazione ABI di riferimento. Senza di esso, //common:kernel_aarch64_abi_dist non rileverà alcuna differenza.

Aggiorna la rappresentazione ABI di riferimento

Qualsiasi modifica che influisca sull'ABI del kernel, ad esempio un aggiornamento dell'elenco di simboli , deve riflettersi nella rappresentazione ABI di riferimento ( common/android/abi_gki_aarch64.stg , definita in BUILD.bazel ). Per fare ciò è necessario eseguire il seguente comando:

​​tools/bazel run //common:kernel_aarch64_abi_update

Questo comando esegue tutte le operazioni descritte nel passaggio Analizza le differenze ABI e inoltre aggiorna la rappresentazione di riferimento nelle fonti. L'ABI aggiornata può quindi essere caricata nello stesso commit della modifica. Includere le differenze ABI rispetto al report in $DIST_DIR/abi.report.short nel messaggio di commit.

Monitoraggio ABI e target dei dispositivi

Il monitoraggio ABI deve essere configurato solo per gli obiettivi principali della build del kernel. 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 tracciamento dell'elenco dei simboli del dispositivo . La definizione ABI deve essere aggiornata utilizzando la build GKI.

Consulta anche la documentazione di riferimento per Kleaf: supporto del monitoraggio ABI (dispositivo) .

Versioni del kernel precedenti

Androide 13

Le istruzioni di compilazione sono per lo più 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 .

Android 12 e versioni precedenti

Come in Android 13, il formato ABI è XML.

I kernel più vecchi usano build.sh invece di Kleaf. Per il monitoraggio ABI dovresti utilizzare build_abi.sh , che accetta le stesse variabili di ambiente per personalizzare la build di build.sh . Per esempio:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Questo crea il kernel ed estrae la rappresentazione ABI nella sottodirectory OUT_DIR (che è out_abi per impostazione predefinita) ed è equivalente al //common:kernel_aarch64_abi_dist target di Kleaf (vedi Compilazione del kernel e degli artefatti 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 è necessario aggiornare la rappresentazione ABI del kernel, il modo più conveniente è utilizzare le opzioni --update e --print-report :

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

Il --print-report stampa le differenze ABI tra il file così com'è e un ABI appena generato.

L'opzione --update sovrascrive la rappresentazione ABI di riferimento. Esegue anche l' aggiornamento dell'elenco dei simboli quando si utilizza BUILD_CONFIG per un dispositivo con KMI_SYMBOL_LIST configurato.