Es fundamental mantener una interfaz de módulo de kernel (KMI) estable para los módulos del proveedor. El kernel de GKI se compila y envía en formato binario, y los módulos cargables por el proveedor se compilan en un árbol separado. El kernel de GKI y los módulos del proveedor resultantes deben funcionar como si se hubieran compilado juntos.
En general, la comunidad de Linux no aprueba la noción de estabilidad de la ABI en el kernel para el kernel principal. Ante diferentes cadenas de herramientas, configuraciones y un kernel de Linux mainline en constante evolución, no es factible mantener un KMI estable en la línea principal. Sin embargo, es posible mantener un KMI estable en el entorno de GKI con estas restricciones:
Solo se puede usar una sola configuración,
gki_defconfig
, para compilar el kernel.El KMI solo es estable dentro de la misma versión LTS y de Android de un kernel, como
android13-5.10
,android12-5.10
oandroid13-5.15
.- No se mantiene la estabilidad de KMI para
android-mainline
.
- No se mantiene la estabilidad de KMI para
Solo se usa la cadena de herramientas específica de Clang que se proporciona en AOSP y se define para la rama correspondiente para compilar el kernel y los módulos.
Solo los símbolos que se sabe que usan los módulos, como se especifica en una lista de símbolos, se supervisan en busca de estabilidad y se consideran símbolos de KMI.
- El corolario es que los módulos de proveedores solo deben usar símbolos de KMI. Esta restricción se aplica mediante cargas de módulos fallidas si se requieren símbolos que no sean de KMI.
Después de que se inmoviliza la rama de KMI, se permiten los cambios, pero no se puede dañar el KMI. Estos cambios incluyen los siguientes:
- Cambios de 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 los manifiestos repo
en kernel/manifest
describen completamente el entorno de compilación. Por ejemplo, el manifiesto de android13-5.15
incluye la cadena de herramientas, las secuencias de comandos de compilación y todo lo demás necesario para compilar el kernel de la imagen genérica de kernel (GKI). Los archivos de configuración build.config
correspondientes, como la configuración de compilación de GKI build.config.gki.aarch64
, garantizan que las herramientas incluidas se usen correctamente para generar resultados de compilación coherentes.
El uso de un proceso de compilación hermético también garantiza que la descripción de la ABI del árbol sea coherente, ya sea que la genere Google (por ejemplo, abi_gki_aarch64.xml
para android13-5.15
) o se genere en un árbol local que incluya los módulos del proveedor. Las herramientas para crear y comparar la descripción de la ABI de 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 los módulos del proveedor. A partir de Android 10, todos los kernels de Android deben compilarse con una cadena de herramientas de LLVM. Con GKI, la cadena de herramientas de LLVM que se usa para compilar los kernels de productos y los módulos de proveedores debe generar la misma ABI que la cadena de herramientas de LLVM de AOSP, y los socios deben asegurarse de que el KMI sea compatible con el kernel de GKI. Te recomendamos que uses las herramientas de compilación proporcionadas, ya que proporcionan la mejor compatibilidad.
Próximos pasos
Para obtener instrucciones sobre cómo compilar el kernel con el proceso de compilación hermético y la cadena de herramientas de LLVM, consulta Cómo compilar kernels.
Para obtener instrucciones sobre cómo supervisar la ABI y solucionar problemas, consulta Supervisión de ABI de kernel de Android.