Cómo ejecutar ABI Monitoreo

Esta sección describe cómo construir representaciones ABI del kernel de Android y ejecutar el monitoreo ABI. Es aplicable a Android 14 (AOSP experimental) y superior. Para versiones anteriores, consulte Versiones anteriores del kernel .

Consulte también la documentación de referencia para 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 creados.

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

Analice las diferencias de ABI entre la construcción y una representación de referencia

El destino //common:kernel_aarch64_abi_dist , ejecutado en el comando anterior, analiza e informa cualquier diferencia de ABI encontrada entre la representación de compilación y 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 usar 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 una 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 de la ABI de referencia ( common/android/abi_gki_aarch64.stg , definida en BUILD.bazel ). Para hacerlo, debe 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. La ABI actualizada se puede cargar en la misma confirmación que el cambio. Incluya las diferencias de ABI del 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 kernel central. Las configuraciones de compilación mixtas (las que definen base_kernel ) que se compilan directamente con el kernel de GKI solo necesitan agregar soporte para rastrear la lista de símbolos del dispositivo . La definición de ABI debe actualizarse utilizando la compilación GKI.

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

Versiones anteriores del núcleo

androide 13

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

Android 12 e inferior

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

Los núcleos 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 compila el kernel y extrae la representación ABI en el subdirectorio OUT_DIR (que es out_abi de forma predeterminada) y es equivalente al destino //common:kernel_aarch64_abi_dist de Kleaf (consulte Crear kernel y artefactos ABI ).

La representación ABI de referencia se almacena en android/abi_gki_aarch64.xml según lo definido por 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.