A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release
en lugar de aosp-main
para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Mantén una interfaz de módulo de kernel estable
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
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 que se pueden cargar del 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 android14-6.1
, android15-6.6
o android16-6.12
.
- No se mantiene la estabilidad de KMI para
android-mainline
.
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.
- La consecuencia 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 por completo el entorno de compilación. Por ejemplo, el manifiesto de android16-6.12
incluye la cadena de herramientas, el sistema de compilación y todo lo demás necesario para compilar el kernel de la imagen genérica de kernel (GKI). La configuración de compilación, principalmente BUILD.bazel
, garantiza 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, gki/aarch64/abi.stg
para android16-6.12
) 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
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-07-27 (UTC)"],[],[],null,["# Maintain a stable kernel module interface\n\nIt's critical to maintain a stable kernel module interface (KMI) for vendor\nmodules. The GKI kernel is\nbuilt and shipped in binary form and vendor-loadable modules are built in a\nseparate tree. The resulting GKI kernel and vendor modules must work as\nthough they were built together.\n\nGenerally, the Linux community has\n[frowned on the notion of in-kernel ABI\nstability](https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rst)\nfor the mainline kernel. In the face of different toolchains, configurations,\nand an ever-evolving Linux mainline kernel, it isn't feasible to maintain a\nstable KMI in mainline. However, it's possible to maintain a stable KMI in\nthe highly-constrained GKI environment with these constraints:\n\n- Only a single configuration, `gki_defconfig`, can be used to build the\n kernel.\n\n- The KMI is only stable within the same LTS and Android version of a kernel,\n such as `android14-6.1`, `android15-6.6` or `android16-6.12`.\n\n - No KMI stability is maintained for `android-mainline`.\n- Only the specific *Clang* toolchain supplied in AOSP and defined for the\n corresponding branch is used for building kernel and modules.\n\n- Only symbols known to be used by modules as specified in a symbol list are\n monitored for stability and considered KMI symbols.\n\n - The corollary is that vendor modules must use only KMI symbols. This constraint is enforced by failing module loads if non-KMI-symbols are required.\n- After the KMI branch is frozen, changes are allowed but can't break the KMI.\n These changes include the following:\n\n - Config changes\n - Kernel code changes\n - Toolchain changes (including updates)\n\nUse the hermetic build process and LLVM toolchain\n-------------------------------------------------\n\nThe hermetic build process ensures a stable KMI by having `repo` manifests in\n`kernel/manifest` completely describe the build environment. For example, the\n[manifest for `android16-6.12`](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android16-6.12/default.xml)\nincludes the toolchain, build system, and everything else required to build the\nGeneric Kernel Image (GKI) kernel. The build configuration, primarily\n[`BUILD.bazel`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/BUILD.bazel),\nensures that the included tools are used correctly to generate consistent build\nresults.\n\nUsing a hermetic build process also ensures that the ABI description for the\ntree is consistent whether generated by Google (for example,\n[`gki/aarch64/abi.stg`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/gki/aarch64/abi.stg)\nfor `android16-6.12`) or generated in a local tree that includes the vendor\nmodules. The\n[tools to create and compare the ABI description](https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/abi/)\nfor the Kernel Module Interface (KMI) are also provided as part of the repo\ndescribed by the manifest.\n\nThe toolchain used to build the GKI kernel must be completely compatible with\nthe toolchain used to build vendor modules. As of Android\n10, all Android kernels must be built\nwith an LLVM toolchain. With GKI, the LLVM toolchain used to build product\nkernels and vendor modules must generate the same ABI as the LLVM toolchain from\nAOSP and partners must ensure that the KMI is compatible with the GKI kernel.\nUsing the provided build tools is strongly encouraged as they provide the\nbest compatibility.\n\nWhat's next?\n------------\n\n- For instructions on building the kernel using the hermetic build process and\n LLVM toolchain, refer to refer to\n [Build kernels](/docs/setup/build/building-kernels).\n\n- For instructions on how to monitor the ABI and fix issues, refer to\n [Android Kernel ABI Monitoring](/docs/core/architecture/kernel/abi-monitor)"]]