É fundamental manter uma interface de módulo de kernel (KMI) estável para módulos do fornecedor. O kernel da GKI é criado e enviado em formato binário, e os módulos carregáveis pelo 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 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 uma KMI estável no módulo principal. No entanto, é possível manter um KMI estável no ambiente GKI altamente restrito com estas restrições:
Apenas uma configuração,
gki_defconfig
, pode ser usada para criar o kernel.A KMI só é estável na mesma versão LTS e do Android de um kernel, como
android14-6.1
,android15-6.6
ouandroid16-6.12
.- Nenhuma estabilidade de KMI é mantida para
android-mainline
.
- Nenhuma estabilidade de KMI é mantida para
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 para estabilidade e considerados símbolos da KMI.
- O corolário é que os módulos do fornecedor precisam usar apenas símbolos KMI. Essa restrição é aplicada ao falhar no carregamento de módulos se símbolos não KMI forem necessários.
Depois que a ramificação do KMI é congelada, as mudanças são permitidas, mas não podem interromper o KMI. Essas mudanças incluem o seguinte:
- Mudanças de configuração
- Mudanças no código do kernel
- Mudanças no conjunto 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 porque os manifestos repo
em
kernel/manifest
descrevem completamente o ambiente de build. Por exemplo, o
manifesto para android16-6.12
inclui o conjunto de ferramentas, o sistema de build e tudo mais necessário para criar o
kernel de imagem genérica do kernel (GKI). A configuração de build, principalmente
BUILD.bazel
,
garante que as ferramentas incluídas sejam usadas corretamente para gerar resultados de build
consistentes.
Usar 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 em uma árvore local que inclua os módulos
do fornecedor. As
ferramentas para criar e comparar a descrição da ABI
da interface do módulo do kernel (KMI) também são fornecidas como parte do repositório
descrito pelo manifesto.
A cadeia de ferramentas usada para criar o kernel 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, a cadeia de ferramentas LLVM usada para criar kernels de produtos e módulos de fornecedores precisa gerar a mesma ABI que a cadeia de ferramentas LLVM do AOSP, e os parceiros precisam garantir que a KMI seja compatível com o kernel do GKI. É altamente recomendável usar as ferramentas de build fornecidas, já que elas oferecem a melhor compatibilidade.
Quais são as próximas etapas?
Para instruções sobre como criar o kernel usando o processo de build hermético e o conjunto de ferramentas LLVM, consulte Criar kernels.
Para instruções sobre como monitorar a ABI e corrigir problemas, consulte Monitoramento de ABI do kernel do Android