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.