Cette page explique comment créer des représentations ABI du noyau Android et exécuter la surveillance de l'ABI. Elle s'applique à Android 16 et aux versions ultérieures. Pour les versions antérieures, consultez ABI monitor previous kernel versions.
Consultez également la documentation de référence de Kleaf : Prise en charge de la surveillance de l'ABI (GKI) et Prise en charge de la surveillance de l'ABI (appareil).
Compiler le noyau et sa représentation ABI
Après avoir téléchargé les sources GKI, exécutez la commande suivante pour compiler le noyau GKI et les artefacts ABI :
tools/bazel run //common:kernel_aarch64_abi_dist
Cette commande crée la représentation ABI actuelle et la copie dans $DIST_DIR/abi.stg
avec le noyau et les modules créés. $DIST_DIR
a la valeur par défaut out_abi/kernel_aarch64_abi_dist/dist
.
Vous pouvez spécifier des arguments supplémentaires pour l'outil ABI à la fin de la commande après --
. Par exemple, pour modifier la destination des artefacts ABI et de compilation, vous pouvez utiliser l'option --destdir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
Analyser les différences d'ABI entre la compilation et une représentation de référence
La cible //common:kernel_aarch64_abi_dist
, exécutée dans la commande précédente, analyse et signale toute différence d'ABI trouvée entre la représentation de compilation et de référence située à common/gki/aarch64/abi.stg
(définie dans BUILD.bazel
). Ces différences sont affichées à la fin de la compilation, comme le montre l'exemple suivant :
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
Le rapport imprimé provient de l'artefact de compilation situé à l'adresse $DIST_DIR/abi_stgdiff/abi.report.short
, ainsi que des rapports dans d'autres formats.
L'automatisation doit utiliser le code de sortie de la commande de compilation, qui est différent de zéro si des différences sont détectées.
Notez que les branches de la phase de développement, y compris android-mainline
, n'ont aucune représentation ABI de référence.
Sans cela, //common:kernel_aarch64_abi_dist
ne détectera aucune différence.
Mettre à jour la représentation ABI de référence
Toute modification affectant l'ABI du noyau, comme une mise à jour de la liste des symboles, doit être reflétée dans la représentation de l'ABI de référence (common/gki/aarch64/abi.stg
, définie dans BUILD.bazel).
Pour ce faire, exécutez la commande suivante :
tools/bazel run //common:kernel_aarch64_abi_update
Cette commande effectue toutes les opérations de l'étape Analyser les différences d'ABI et met également à jour la représentation de référence dans les sources. L'ABI mise à jour peut ensuite être importée dans le même commit que la modification. Incluez les différences d'ABI du rapport dans $DIST_DIR/abi_stgdiff/abi.report.short
dans le message de commit.
Surveillance de l'ABI et cibles d'appareils
La surveillance de l'ABI ne doit être configurée que pour les cibles de compilation du noyau principal. Les configurations de compilation mixtes (celles qui définissent base_kernel
) qui compilent directement avec le noyau GKI n'ont besoin que d'ajouter la prise en charge du suivi de la liste des symboles de l'appareil.
La définition de l'ABI doit être mise à jour à l'aide de la compilation GKI.
Consultez également la documentation de référence pour Kleaf : Surveillance de l'ABI (appareil).
Surveillance de l'ABI pour les versions précédentes du noyau (Android 15 et versions antérieures)
Pour les versions précédentes du noyau, les instructions de compilation et de surveillance de l'ABI sont différentes, comme suit.
Android 15 et 14
Les instructions sont pour la plupart identiques à celles d'Android 16, sauf que la représentation ABI de référence est common/android/abi_gki_aarch64.stg
et que $DIST_DIR
est défini par défaut sur out_abi/kernel_aarch64/dist
.
Android 13
Android 13 peut être conçu avec Kleaf ou avec d'anciens scripts de compilation.
Pour Kleaf, les instructions sont les mêmes que pour Android 14, sauf que le format ABI est XML et que la représentation ABI de référence est common/android/abi_gki_aarch64.xml
.
Pour les anciens scripts de compilation, les instructions sont les mêmes que pour Android 12.
Android 12 et versions antérieures
Le format ABI est XML et la représentation ABI de référence est common/android/abi_gki_aarch64.xml
.
Ces noyaux utilisent build.sh
au lieu de Kleaf. Pour la surveillance de l'ABI, vous devez utiliser build_abi.sh
, qui accepte les mêmes variables d'environnement pour personnaliser la compilation que build.sh
. Exemple :
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Cela permet de créer le noyau et d'extraire la représentation ABI dans le sous-répertoire OUT_DIR
(qui est out_abi
par défaut). Cela équivaut à la cible //common:kernel_aarch64_abi_dist
de Kleaf (voir Créer des artefacts de noyau et d'ABI).
La représentation ABI de référence est stockée dans android/abi_gki_aarch64.xml
, comme défini par la variable ABI_DEFINITION
dans common/build.config.gki.aarch64
.
Si vous devez mettre à jour la représentation ABI du noyau, le moyen le plus pratique consiste à utiliser les options --update
et --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
affiche les différences d'ABI entre le fichier tel qu'il existe et un ABI nouvellement généré.
L'option --update
remplace la représentation ABI de référence. Il effectue également la mise à jour de la liste des symboles lorsque BUILD_CONFIG
est utilisé pour un appareil avec KMI_SYMBOL_LIST
configuré.