Cómo ejecutar ABI Monitoreo

Esta sección describe cómo crear representaciones ABI del kernel de Android y ejecutar la supervisión de ABI. Es aplicable a Android 14 y superior. Para versiones anteriores, consulte Versiones anteriores del kernel .

Consulte también la documentación de referencia de Kleaf: Soporte de monitoreo ABI (GKI) y Soporte de monitoreo ABI (dispositivo) .

Construya el kernel y su representación ABI

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

tools/bazel run //common:kernel_aarch64_abi_dist

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

Puede especificar argumentos adicionales para las herramientas ABI al final del comando después de -- . Por ejemplo, para cambiar el destino de ABI y crear artefactos, puede usar la opción --dist_dir :

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

Analizar las diferencias ABI entre la compilación y una representación de referencia.

El objetivo //common:kernel_aarch64_abi_dist , ejecutado en el comando anterior, analiza e informa cualquier diferencia ABI encontrada entre la compilación y la representación de referencia ubicada en common/android/abi_gki_aarch64.stg (definida en BUILD.bazel ). Estas diferencias se imprimirán 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 informes en otros formatos.

La automatización debe utilizar el código de salida del comando de compilación, que será distinto de cero si se encuentran diferencias.

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

Actualizar la representación ABI de referencia

Cualquier cambio que afecte la ABI del kernel, como una actualización de la lista de símbolos , debe reflejarse en la representación ABI de referencia ( common/android/abi_gki_aarch64.stg , definida en BUILD.bazel ). Para hacerlo es necesario ejecutar el siguiente comando:

​​tools/bazel run //common:kernel_aarch64_abi_update

Este comando realiza todo en el paso Analizar las diferencias ABI y, además, actualiza la representación de referencia en las fuentes. Luego, la ABI actualizada se puede cargar en la misma confirmación que el cambio. Incluya las diferencias de ABI con respecto al informe en $DIST_DIR/abi.report.short en el mensaje de confirmación.

Monitoreo ABI y objetivos de dispositivos

La supervisión de ABI solo debe configurarse para los objetivos de compilación del núcleo principal. Las configuraciones de compilación mixta (las que definen base_kernel ) que se compilan directamente con el kernel GKI solo necesitan agregar soporte para rastrear la lista de símbolos del dispositivo . La definición de ABI debe actualizarse mediante la compilación GKI.

Consulte también la documentación de referencia de Kleaf: Soporte de monitoreo ABI (dispositivo) .

Versiones anteriores del kernel

androide 13

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

Android 12 y anteriores

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

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

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

Esto construye el kernel y extrae la representación ABI en el subdirectorio OUT_DIR (que es out_abi por defecto) y es equivalente al destino //common:kernel_aarch64_abi_dist de Kleaf (consulte Construir kernel y artefactos ABI ).

La representación ABI de referencia se almacena en android/abi_gki_aarch64.xml según lo define la variable ABI_DEFINITION en common/build.config.gki.aarch64 .

Si necesita actualizar la representación ABI del kernel, la forma más conveniente es 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 un ABI recién generado.

La opción --update sobrescribe la representación ABI de referencia. También actualiza la lista de símbolos cuando se usa BUILD_CONFIG para un dispositivo con KMI_SYMBOL_LIST configurado.