Cómo ejecutar la supervisión de ABI

En esta página, se describe cómo compilar representaciones de ABI de kernel de Android y cómo ejecutarlas Supervisión de ABI. Se aplica a Android 14 y mayores. Para versiones anteriores, consulta Versiones anteriores de kernel.

Consulta también la documentación de referencia de Kleaf: Compatibilidad con la supervisión de ABI (GKI) y Compatibilidad con la supervisión de ABI (Dispositivo).

Cómo compilar el kernel y su representación de ABI

Después de descargar fuentes de GKI Ejecuta el siguiente comando para compilar el kernel de GKI y los artefactos de ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

Este comando compila la representación de ABI actual y la copia en out_abi/kernel_aarch64/dist/abi.stg junto con el kernel y los módulos compilados.

Puedes especificar argumentos adicionales para las herramientas de ABI al final del comando después del -- Por ejemplo, para cambiar el destino de la ABI y los artefactos de compilación, puedes puedes usar la opción --dist_dir:

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

Cómo analizar las diferencias de las ABI entre la compilación y una representación de referencia

El destino //common:kernel_aarch64_abi_dist, que se ejecuta en el comando anterior, Analiza e informa las diferencias de ABI encontradas entre la compilación y la referencia. representada ubicada en common/android/abi_gki_aarch64.stg (definida en BUILD.bazel). Estas diferencias se imprimen al final de la compilación, como se muestra en el siguiente ejemplo:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

El informe impreso proviene del artefacto de compilación ubicado en out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short junto con los informes en otros formatos.

La automatización debería usar el código de salida del comando de compilación, que no es cero si si se detectan diferencias.

Ten en cuenta que fase de desarrollo Las ramas, incluida android-mainline, no tienen representación de ABI de referencia. Sin él, //common:kernel_aarch64_abi_dist no detectará ninguna diferencia.

Cómo actualizar la representación de ABI de referencia

Cualquier cambio que afecte la ABI del kernel, como un actualización de la lista de símbolos, debe reflejarse en la representación de ABI de referencia (common/android/abi_gki_aarch64.stg, definido en Build.bazel). Para ello, debes ejecutar el siguiente comando:

​​tools/bazel run //common:kernel_aarch64_abi_update

Este comando realiza todo el proceso Analiza las diferencias de las ABI y, además, actualiza la de referencia en las fuentes. Luego, la ABI actualizada se puede subir en la misma confirmación que el cambio. Incluye las diferencias de ABI de la en $DIST_DIR/abi.report.short en el mensaje de confirmación.

Supervisión de ABI y destinos de dispositivos

La supervisión de ABI solo debe configurarse para los objetivos de compilación del kernel principal. Combinada configuraciones de compilación (las que definen base_kernel) que se compilan directamente con el kernel de GKI solo debe agregar compatibilidad para el seguimiento del símbolo del dispositivo lista. La definición de ABI debe actualizarse con la compilación de GKI.

Consulta también la documentación de referencia de Kleaf: Compatibilidad con la supervisión de ABI (Dispositivo).

Versiones anteriores de kernel

Android 13

Las instrucciones de compilación son mayormente las mismas que Android 14, excepto que el formato de ABI es XML y la representación de ABI de referencia es common/android/abi_gki_aarch64.xml.

Android 13 y versiones anteriores

Al igual que en Android 13, el formato de ABI es XML.

Los kernels más antiguos usan build.sh en lugar de Kleaf. Para la supervisión de ABI, debes usar build_abi.sh, que acepta las mismas variables de entorno para personalizar la compilar como build.sh. Por ejemplo:

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

De esta manera, se compila el kernel y se extrae la representación de ABI en el OUT_DIR. (que es out_abi de forma predeterminada) y es equivalente al Objetivo //common:kernel_aarch64_abi_dist de Kleaf (consulta Compilar artefactos de kernel y ABI).

La representación de ABI de referencia se almacena en android/abi_gki_aarch64.xml como definido por la variable ABI_DEFINITION en common/build.config.gki.aarch64

Si necesitas actualizar la representación de ABI de kernel, la manera más conveniente es para usar las opciones --update y --print-report:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report imprime las diferencias de ABI entre el archivo tal como existe. y una ABI generada recientemente.

La opción --update reemplaza la representación de ABI de referencia. También hace el actualización de la lista de símbolos Cuando se usa BUILD_CONFIG para un dispositivo con KMI_SYMBOL_LIST configurado