Manter uma interface de módulo de kernel (KMI) estável

É fundamental manter um KMI estável para os módulos do fornecedor. O kernel GKI é construído e enviado em formato binário e os módulos carregáveis ​​pelo fornecedor são construídos em uma árvore separada. O kernel GKI resultante e os módulos do fornecedor devem funcionar como se tivessem sido construídos 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 de linha principal do Linux em constante evolução, não é viável manter uma KMI estável na linha principal. No entanto, é possível manter uma 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 dentro da mesma versão LTS e Android de um kernel, como android13-5.10 , android12-5.10 ou android13-5.15 .

    • Nenhuma estabilidade de KMI é mantida para android-mainline .
  • Somente a cadeia de ferramentas Clang específica fornecida no AOSP e definida para o ramo correspondente é usada para construir o kernel e os módulos.

  • Somente os 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. Essa restrição é imposta por carregamentos de módulo com falha se símbolos não KMI forem necessários.
  • Depois que a ramificação KMI é congelada, as alterações são permitidas, mas não podem quebrar o KMI. Essas mudanças incluem o seguinte:

    • Alterações de configuração
    • Alterações no código do kernel
    • Mudanças na cadeia de ferramentas (incluindo atualizações)

Use o processo de construção hermético e a cadeia de ferramentas LLVM

O processo de compilação hermético garante uma KMI estável, fazendo com que os manifestos repo no kernel/manifest descrevam completamente o ambiente de compilação. Por exemplo, o manifesto para android13-5.15 inclui a cadeia de ferramentas, scripts de compilação e tudo o mais necessário para criar o kernel Generic Kernel Image (GKI). Os respectivos arquivos de configuração build.config , como o GKI build config 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 inclua 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 os módulos do fornecedor. A partir do Android 10, todos os kernels do Android devem ser criados com uma cadeia de ferramentas LLVM. Com 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 a KMI seja compatível com o kernel GKI. O uso das ferramentas de compilação fornecidas é altamente recomendável, 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 a cadeia de ferramentas LLVM, consulte Build kernels .

  • Para obter instruções sobre como monitorar a ABI e corrigir problemas, consulte Android Kernel ABI Monitoring