Questa pagina descrive come creare rappresentazioni ABI del kernel Android ed eseguire Monitoraggio dell'ABI. È applicabile ad Android 14 e in alto. Per le versioni precedenti, consulta Versioni del kernel precedenti.
Vedi anche la documentazione di riferimento per Kleaf: Supporto del monitoraggio dell'ABI (GKI) e Supporto del monitoraggio dell'ABI (Dispositivo).
Crea il kernel e la sua rappresentazione ABI
Dopo aver scaricato le fonti 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 attuale e la copia
out_abi/kernel_aarch64/dist/abi.stg
insieme al kernel e i moduli creati.
Puoi specificare argomenti aggiuntivi per gli strumenti ABI alla fine del comando
dopo il giorno --
. Ad esempio, per modificare la destinazione di ABI e gli artefatti della build,
è possibile 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 il riferimento
situata in common/android/abi_gki_aarch64.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 della build che si trova nella
out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
insieme ai report in
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
fase di sviluppo
rami, tra cui android-mainline
, non hanno una rappresentazione ABI di riferimento.
In caso contrario, //common:kernel_aarch64_abi_dist
non rileverà alcuna differenza.
Aggiorna la rappresentazione ABI di riferimento
Qualsiasi modifica che interessa l'ABI del kernel, ad esempio
aggiornamento dell'elenco dei simboli,
deve riflettersi nella rappresentazione ABI di riferimento
(common/android/abi_gki_aarch64.stg
, definito in
BUILD.bazel).
Per farlo devi eseguire questo comando:
tools/bazel run //common:kernel_aarch64_abi_update
Questo comando esegue tutte le operazioni del passaggio
Analizzare le differenze ABI e aggiornare inoltre le
una rappresentazione di riferimento nelle origini. L'ABI aggiornata potrà quindi essere caricata
lo stesso commit della modifica. Includi le differenze ABI rispetto alla classe
report in $DIST_DIR/abi.report.short
nel messaggio di commit.
Monitoraggio dell'ABI e targeting per dispositivo
Il monitoraggio dell'ABI deve essere configurato solo per le destinazioni delle build del kernel principali. Misto
configurazioni di build (quelle che definiscono base_kernel
) che vengono compilate direttamente
nel kernel GKI devono solo aggiungere supporto per il tracciamento del simbolo del dispositivo
.
La definizione dell'ABI deve essere aggiornata utilizzando la build GKI.
Vedi anche la documentazione di riferimento per Kleaf: Supporto del monitoraggio dell'ABI (Dispositivo).
Versioni kernel precedenti
Android 13
Le istruzioni per la creazione sono per lo più le stesse
Android 14, tranne per il formato ABI: XML.
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 meno recenti usano build.sh
al posto di Kleaf. Per il monitoraggio dell'ABI devi usare
build_abi.sh
, che accetta le stesse variabili di ambiente per personalizzare
creare come build.sh
. Ad esempio:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Questa operazione crea il kernel ed estrae la rappresentazione ABI nell'elemento OUT_DIR
(che per impostazione predefinita è out_abi
) ed equivale alla
//common:kernel_aarch64_abi_dist
target di Kleaf (vedi
Crea artefatti kernel e ABI).
La rappresentazione ABI di riferimento è archiviata in android/abi_gki_aarch64.xml
come
definita dalla variabile ABI_DEFINITION
in common/build.config.gki.aarch64
.
Se devi aggiornare la rappresentazione ABI del kernel, il modo più conveniente è
per 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 ABI di riferimento. Inoltre,
il
aggiornamento elenco simboli
quando utilizzi BUILD_CONFIG
per un dispositivo su cui è configurato KMI_SYMBOL_LIST
.