Cómo mantener una interfaz de módulo de kernel estable

Es fundamental mantener una interfaz de módulo de kernel (KMI) estable para el proveedor. módulos. El kernel de GKI es se compilan y se envían en formato binario, y los módulos cargables por el proveedor se compilan en un árbol separado. El kernel de GKI resultante y los módulos de los proveedores deben funcionar como aunque se crearon juntas.

En general, la comunidad de Linux tiene faltaba la noción de ABI de kernel estabilidad para el kernel de la línea principal. Ante diferentes cadenas de herramientas, configuraciones y un kernel de línea principal de Linux en constante evolución, no es factible mantener un un KMI estable en la línea principal. Sin embargo, es posible mantener un KMI estable en el entorno de GKI altamente restringido con las siguientes restricciones:

  • Solo se puede usar una única configuración, gki_defconfig, para compilar el kernel.

  • El KMI solo es estable dentro de la misma versión de LTS y Android de un kernel. como android13-5.10, android12-5.10 o android13-5.15.

    • No se mantiene la estabilidad de KMI para android-mainline.
  • Solo la cadena de herramientas específica de Clang proporcionada en AOSP y definida para la la rama correspondiente se usa para compilar el kernel y los módulos.

  • Solo se anulan los símbolos que los módulos usan, según se especifican en una lista de símbolos. supervisión de estabilidad y considerados símbolos de KMI.

    • Como consecuencia, los módulos de proveedores solo deben usar símbolos de KMI. Esta se aplica de manera forzosa mediante las cargas de módulos con errores si se usan símbolos que no son de KMI como en los productos necesarios.
  • Después de que se inmoviliza la rama de KMI, se permiten los cambios, pero no pueden dañar el KMI. Entre estos cambios, se incluyen los siguientes:

    • Cambios en la configuración
    • Cambios en el código del kernel
    • Cambios en la cadena de herramientas (incluidas las actualizaciones)

Usa el proceso de compilación hermético y la cadena de herramientas de LLVM

El proceso de compilación hermético garantiza un KMI estable, ya que tiene manifiestos de repo en kernel/manifest describe por completo el entorno de compilación. Por ejemplo, el manifiesto para android13-5.15 incluye la cadena de herramientas, las secuencias de comandos de compilación y todo lo demás necesario para compilar la Kernel de la imagen genérica del kernel (GKI). La configuración build.config respectiva como la configuración de compilación de GKI build.config.gki.aarch64, asegurarse de que las herramientas incluidas se usen correctamente para generar compilaciones coherentes resultados.

El uso de un proceso de compilación hermético también garantiza que la descripción de la ABI para el sea coherente ya sea que lo haya generado Google (por ejemplo, abi_gki_aarch64.xml para android13-5.15) o se generó en un árbol local que incluya al proveedor módulos. El para crear y comparar la descripción de la ABI para la interfaz de módulo de kernel (KMI) también se proporcionan como parte del repositorio. que describe el manifiesto.

La cadena de herramientas que se usa para compilar el kernel de GKI debe ser completamente compatible con la cadena de herramientas que se usa para compilar módulos de proveedores. A partir de Android 10, se deben compilar todos los kernels de Android con una cadena de herramientas de LLVM. Con GKI, la cadena de herramientas de LLVM se usó para crear kernels y módulos de proveedores deben generar la misma ABI que la cadena de herramientas de LLVM a partir del El AOSP y los socios deben asegurarse de que el KMI sea compatible con el kernel de GKI. Se recomienda encarecidamente el uso de las herramientas de compilación proporcionadas, ya que ofrecen la la mejor compatibilidad.

¿Qué sigue?

  • Para obtener instrucciones sobre cómo compilar el kernel mediante el proceso de compilación hermético y de la cadena de herramientas de LLVM, consulta Compila kernels.

  • Para obtener instrucciones sobre cómo supervisar la ABI y solucionar problemas, consulta Supervisión de ABI de kernel de Android