Questa pagina descrive come creare rappresentazioni ABI del kernel di Android ed eseguire il monitoraggio ABI. È applicabile ad Android 14 e versioni superiori. Per le versioni precedenti, consulta Versioni precedenti del kernel.
Consulta anche la documentazione di riferimento per Kleaf: Supporto per il monitoraggio dell'ABI (GKI) e Supporto per il monitoraggio dell'ABI (dispositivo).
Crea il kernel e la relativa rappresentazione ABI
Dopo aver scaricato le sorgenti GKI, esegui il seguente comando per compilare il kernel e gli elementi ABI di GKI:
tools/bazel run //common:kernel_aarch64_abi_dist
Questo comando genera la rappresentazione ABI corrente e la copia in out_abi/kernel_aarch64/dist/abi.stg
insieme al kernel e ai moduli compilati.
Puoi specificare argomenti aggiuntivi per gli strumenti ABI alla fine del comando
dopo --
. Ad esempio, per modificare la destinazione per gli elementi ABI e di compilazione, puoi utilizzare l'opzione --dist_dir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
Analizza 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 rilevate tra la build e la rappresentazione di riferimento in common/android/abi_gki_aarch64.stg
(definita in BUILD.bazel
). Queste differenze vengono 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'elemento dell'apposita compilazione situato in
out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
insieme ai report in
altri formati.
L'automazione deve utilizzare il codice di uscita del comando di compilazione, che non è pari a zero se vengono rilevate differenze.
Tieni presente che i branch di fase di sviluppo, incluso android-mainline
, non hanno una rappresentazione ABI di riferimento.
In caso contrario, //common:kernel_aarch64_abi_dist
non rileverà alcuna differenza.
Aggiorna la rappresentazione dell'ABI di riferimento
Qualsiasi modifica che influisca sull'ABI del kernel, ad esempio un
aggiornamento dell'elenco di simboli,
deve essere riportata nella rappresentazione dell'ABI di riferimento
(common/android/abi_gki_aarch64.stg
, definito in
BUILD.bazel).
Per farlo, devi eseguire il seguente comando:
tools/bazel run //common:kernel_aarch64_abi_update
Questo comando esegue tutto il passaggio
Analisi delle differenze ABI e aggiorna inoltre la representatione di riferimento nelle origini. L'ABI aggiornato può essere caricato nello stesso commit della modifica. Includi le differenze ABI rispetto al
report in $DIST_DIR/abi.report.short
nel messaggio di commit.
Monitoraggio dell'ABI e targeting per dispositivo
Il monitoraggio ABI deve essere configurato solo per i target di compilazione del kernel di base. Le configurazioni di compilazione miste (quelle che definiscono base_kernel
) che vengono compilate direttamente con il kernel GKI devono solo aggiungere il supporto per il monitoraggio dell'elenco di simboli del dispositivo.
La definizione dell'ABI deve essere aggiornata utilizzando la compilazione GKI.
Consulta anche la documentazione di riferimento di Kleaf: Supporta il monitoraggio ABI (dispositivo).
Versioni precedenti del kernel
Android 13
Le istruzioni per la build sono per lo più le stesse
di Android 14, ad eccezione del fatto che il formato ABI è XML e
la rappresentazione ABI di riferimento è common/android/abi_gki_aarch64.xml
.
Android 13 e versioni precedenti
Come in Android 13, il formato ABI è XML.
I kernel precedenti utilizzano build.sh
anziché Kleaf. Per il monitoraggio ABI, devi utilizzare build_abi.sh
, che accetta le stesse variabili di ambiente per personalizzare la compilazione di build.sh
. Ad esempio:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Questo compila il kernel ed estrae la rappresentazione ABI nella sottodirectory OUT_DIR
(che è out_abi
per impostazione predefinita) ed è equivalente al target //common:kernel_aarch64_abi_dist
di Kleaf (vedi
Creare elementi kernel e 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 ABI del kernel, il modo più pratico è 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 tra l'ABI del file esistente
e un ABI appena generato.
L'opzione --update
sovrascrive la rappresentazione ABI di riferimento. Esegue inoltre
l'aggiornamento dell'elenco di simboli
quando si utilizza BUILD_CONFIG
per un dispositivo con KMI_SYMBOL_LIST
configurato.