É fundamental manter um KMI estável para módulos de fornecedores. O kernel 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 GKI resultante e os módulos do fornecedor devem funcionar como se tivessem sido criados juntos.
Geralmente, a comunidade Linux desaprova a noção de estabilidade ABI no kernel para o kernel principal. Diante de diferentes cadeias de ferramentas, configurações e um kernel da linha principal do Linux em constante evolução, não é viável manter um KMI estável na linha principal. No entanto, é possível manter um KMI estável no ambiente GKI altamente restrito com estas restrições:
Apenas uma única configuração,
gki_defconfig
, pode ser usada para construir o kernel.O KMI só é estável na mesma versão LTS e Android de um kernel, como
android13-5.10
,android12-5.10
ouandroid13-5.15
.- Nenhuma estabilidade do KMI é mantida para
android-mainline
.
- Nenhuma estabilidade do KMI é mantida para
Somente o conjunto de ferramentas Clang específico fornecido no AOSP e definido para o branch correspondente é usado para construir kernel e módulos.
Somente símbolos conhecidos por serem usados pelos módulos conforme especificado em uma lista de símbolos são monitorados quanto à estabilidade e considerados símbolos KMI.
- O corolário é que os módulos do fornecedor devem usar apenas símbolos KMI. Esta restrição é imposta pela falha no carregamento do módulo se símbolos não KMI forem necessários.
Depois que a ramificação do KMI for congelada, alterações serão permitidas, mas não poderão quebrar o KMI. Essas alterações incluem o seguinte:
- Mudanças de configuração
- Mudanças no código do kernel
- Mudanças no conjunto de ferramentas (incluindo atualizações)
Use o processo de construção hermético e o conjunto de ferramentas LLVM
O processo de construção hermético garante um KMI estável, fazendo com que os manifestos repo
no kernel/manifest
descrevam completamente o ambiente de construção. Por exemplo, o manifesto para android13-5.15
inclui o conjunto de ferramentas, scripts de construção e tudo o mais necessário para construir o kernel Generic Kernel Image (GKI). Os respectivos arquivos de configuração build.config
, como a configuração de compilação do GKI build.config.gki.aarch64
, garantem que as ferramentas incluídas sejam usadas corretamente para gerar resultados de compilação consistentes.
O uso de um processo de construção hermético também garante que a descrição da ABI para a árvore seja consistente, seja gerada pelo Google (por exemplo, abi_gki_aarch64.xml
para android13-5.15
ou gerada em uma árvore local que inclui os módulos do fornecedor. As ferramentas para criar e comparar o A descrição da ABI para a Kernel Module Interface (KMI) também é fornecida como parte do repositório descrito pelo manifesto.
A cadeia de ferramentas usada para construir o kernel GKI deve ser totalmente compatível com a cadeia de ferramentas usada para construir módulos do fornecedor. A partir do Android 10, todos os kernels do Android devem ser criados com um conjunto de ferramentas LLVM. Com o GKI, a cadeia de ferramentas LLVM usada para construir kernels de produtos e módulos de fornecedores deve gerar a mesma ABI que a cadeia de ferramentas LLVM do AOSP e os parceiros devem garantir que o KMI seja compatível com o kernel GKI. O uso das ferramentas de construção fornecidas é fortemente encorajado, pois elas fornecem garantias de compatibilidade.
Qual é o próximo?
Para obter instruções sobre como construir o kernel usando o processo de construção hermético e o conjunto de ferramentas LLVM, consulte Construir kernels .
Para obter instruções sobre como monitorar a ABI e corrigir problemas, consulte Android Kernel ABI Monitoring