Comment exécuter la surveillance ABI

Cette section décrit comment créer des représentations ABI du noyau Android et exécuter la surveillance ABI. Il est applicable à Android 14 et supérieur. Pour les anciennes versions, veuillez vous référer aux anciennes versions du noyau .

Consultez également la documentation de référence pour Kleaf : Prise en charge de la surveillance ABI (GKI) et Prise en charge de la surveillance ABI (Device) .

Construire le noyau et sa représentation ABI

Après avoir téléchargé les sources GKI, exécutez la commande suivante pour créer 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 out_abi/kernel_aarch64/dist/abi.stg avec le noyau et les modules construits.

Vous pouvez spécifier des arguments supplémentaires pour les outils ABI à la fin de la commande après -- . Par exemple, pour changer la destination d'ABI et créer des artefacts, vous pouvez utiliser l'option --dist_dir :

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

Analyser les différences ABI entre la construction et une représentation de référence

La cible //common:kernel_aarch64_abi_dist , exécutée dans la commande ci-dessus, analyse et signale toutes les différences ABI trouvées entre la représentation de build et la représentation de référence située dans common/android/abi_gki_aarch64.stg (définie dans BUILD.bazel ). Ces différences seront imprimées à la fin du build, 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 construction situé dans out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short ainsi que de rapports dans d'autres formats.

L'automatisation doit utiliser le code de sortie de la commande build, qui sera différent de zéro si des différences sont trouvées.

Veuillez noter que les branches de la phase de développement , y compris android-mainline , n'ont pas de 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, telle qu'une mise à jour de la liste de symboles , doit être reflétée dans la représentation ABI de référence ( common/android/abi_gki_aarch64.stg , définie dans BUILD.bazel ). Pour ce faire, vous devez exécuter la commande suivante :

​​tools/bazel run //common:kernel_aarch64_abi_update

Cette commande effectue tout dans l'étape Analyser les différences ABI et met en outre à jour la représentation de référence dans les sources. L'ABI mis à jour peut ensuite être téléchargé dans le même commit que la modification. Veuillez inclure les différences ABI par rapport au rapport dans $DIST_DIR/abi.report.short dans le message de validation.

Surveillance de l'ABI et cibles des appareils

La surveillance ABI ne doit être configurée que pour les cibles de construction du noyau. Les configurations de construction mixtes (celles qui définissent base_kernel ) qui se compilent directement avec le noyau GKI n'ont besoin que d' ajouter la prise en charge du suivi de la liste des symboles de périphérique . La définition ABI doit être mise à jour à l'aide de la version GKI.

Consultez également la documentation de référence pour Kleaf : Prise en charge de la surveillance ABI (Device) .

Anciennes versions du noyau

Android 13

Les instructions de construction sont pour la plupart les mêmes que celles d'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 .

Android 12 et versions antérieures

Comme dans Android 13, le format ABI est XML.

Les noyaux plus anciens utilisent build.sh au lieu de Kleaf. Pour la surveillance ABI, vous devez utiliser build_abi.sh , qui accepte les mêmes variables d'environnement pour personnaliser la construction que build.sh . Par exemple:

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

Cela construit le noyau et extrait la représentation ABI dans le sous-répertoire OUT_DIR (qui est out_abi par défaut) et est équivalent à la cible //common:kernel_aarch64_abi_dist de Kleaf (voir Construire le noyau et les artefacts 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

Le --print-report imprime les différences ABI entre le fichier tel qu'il existe et un ABI nouvellement généré.

L'option --update écrase la représentation ABI de référence. Il effectue également la mise à jour de la liste des symboles lors de l'utilisation BUILD_CONFIG pour un périphérique avec KMI_SYMBOL_LIST configuré.