A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Manter uma interface estável do módulo do kernel
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
É essencial manter uma interface estável do módulo do kernel (KMI, na sigla em inglês) para os módulos
do fornecedor. O kernel da GKI é
criado e enviado em formato binário, e os módulos de carregamento do fornecedor são criados em uma
árvore separada. O kernel e os módulos do fornecedor do GKI resultantes precisam funcionar
como se tivessem sido criados juntos.
Em geral, a comunidade do Linux
não aceita a noção de estabilidade
da ABI no kernel
para o kernel principal. Diante de diferentes toolchains, configurações
e um kernel principal do Linux em constante evolução, não é viável manter um
KMI estável no mainline. No entanto, é possível manter um KMI estável no
ambiente de GKI com muitas restrições com estas restrições:
Apenas uma única configuração, gki_defconfig
, pode ser usada para criar o
kernel.
O KMI só é estável na mesma versão LTS e Android de um kernel,
como android14-6.1
, android15-6.6
ou android16-6.12
.
- Não há estabilidade do KMI para
android-mainline
.
Somente a cadeia de ferramentas Clang específica fornecida no AOSP e definida para a
ramificação correspondente é usada para criar o kernel e os módulos.
Somente os símbolos conhecidos por serem usados por módulos, conforme especificado em uma lista de símbolos, são
monitorados quanto à estabilidade e considerados símbolos de KMI.
- O corolário é que os módulos do fornecedor precisam usar apenas símbolos KMI. Essa
restrição é aplicada ao falhar em carregamentos de módulo se símbolos que não são do KMI forem
necessários.
Depois que a ramificação da KMI é congelada, as mudanças são permitidas, mas não podem interromper a KMI.
Essas mudanças incluem:
- Mudanças de configuração
- Mudanças no código do kernel
- Mudanças na cadeia de ferramentas (incluindo atualizações)
Usar o processo de build hermético e o conjunto de ferramentas LLVM
O processo de build hermético garante um KMI estável com a descrição completa do ambiente de build em manifestos repo
em
kernel/manifest
. Por exemplo, o
manifesto para android16-6.12
inclui o conjunto de ferramentas, o sistema de build e tudo o que é necessário para criar a
imagem genérica do kernel (GKI). A configuração do build, principalmente
BUILD.bazel
,
garante que as ferramentas incluídas sejam usadas corretamente para gerar resultados de build
consistentes.
O uso de um processo de build hermético também garante que a descrição da ABI para a
árvore seja consistente, seja gerada pelo Google (por exemplo,
gki/aarch64/abi.stg
para android16-6.12
) ou gerada em uma árvore local que inclui os módulos do fornecedor. As
ferramentas para criar e comparar a descrição da ABI
para a Interface de Módulo do Kernel (KMI, na sigla em inglês) também são fornecidas como parte do repositório
descrito pelo manifesto.
A cadeia de ferramentas usada para criar o kernel do GKI precisa ser totalmente compatível com
a cadeia de ferramentas usada para criar módulos do fornecedor. A partir do Android
10, todos os kernels do Android precisam ser criados
com uma cadeia de ferramentas LLVM. Com o GKI, o conjunto de ferramentas LLVM usado para criar kernels
de produtos e módulos de fornecedores precisa gerar a mesma ABI que o conjunto de ferramentas LLVM do
AOSP, e os parceiros precisam garantir que o KMI seja compatível com o kernel do GKI.
É altamente recomendável usar as ferramentas de build fornecidas, porque elas oferecem a
melhor compatibilidade.
Quais são as próximas etapas?
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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)"]]