Manter uma interface estável do módulo do kernel

É fundamental manter uma interface de módulo do kernel (KMI) estável para o fornecedor módulos. O kernel de GKI é criados e enviados em formato binário, e os módulos carregáveis do fornecedor são criados em em árvore separada. O kernel de GKI e os módulos do fornecedor precisam funcionar como embora tenham sido construídos juntos.

Geralmente, a comunidade Linux tem reprovaram a noção de ABI no kernel estabilidade. para o kernel principal. Com vários conjuntos de ferramentas, configurações e um kernel principal do Linux em constante evolução, não é viável manter uma KMI estável na linha principal. No entanto, é possível manter um KMI estável o ambiente de GKI altamente restrito com estas restrições:

  • Somente uma configuração, gki_defconfig, pode ser usada para criar o grão

  • O KMI só é estável dentro da mesma versão do LTS e do Android de um kernel. como android13-5.10, android12-5.10 ou android13-5.15.

    • Nenhuma estabilidade de KMI é mantida para o android-mainline.
  • Somente o conjunto de ferramentas Clang específico fornecido no AOSP e definido para o a ramificação correspondente é usada para criar kernel e módulos.

  • Somente símbolos conhecidos por serem usados por módulos conforme especificado em uma lista de símbolos são monitoradas quanto à estabilidade e eram consideradas símbolos KMI.

    • Como consequência, os módulos do fornecedor precisam usar apenas símbolos KMI. Isso a restrição é aplicada ao falhar nos carregamentos de módulos se os símbolos que não são KMI forem obrigatórios.
  • Depois que a ramificação KMI é congelada, as mudanças são permitidas, mas não corrompem o KMI. Essas mudanças incluem o seguinte:

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

Usar o processo de compilação hermético e o conjunto de ferramentas LLVM

O processo de build hermético garante um KMI estável, tendo manifestos repo em O kernel/manifest descreve o ambiente de build por completo. Por exemplo, o manifesto de android13-5.15 inclui o conjunto de ferramentas, scripts de build e tudo mais necessário para compilar Kernel de imagem genérica do kernel (GKI, na sigla em inglês). A respectiva configuração do build.config como o arquivo de configuração de build de GKI build.config.gki.aarch64, garantir que as ferramentas incluídas sejam usadas corretamente para gerar builds consistentes resultados.

O uso de um processo de compilação hermética também garante que a descrição da ABI do é consistente, seja ela gerada pelo Google (por exemplo, abi_gki_aarch64.xml para android13-5.15) ou geradas em uma árvore local que inclui o fornecedor módulos. A ferramentas para criar e comparar a descrição da ABI da interface de módulo do kernel (KMI) também são fornecidos como parte do repositório descritos pelo manifesto.

O conjunto de ferramentas usado para criar o kernel de GKI precisa ser totalmente compatível com o conjunto de ferramentas usado para criar módulos de fornecedores. A partir do Android 10, todos os kernels do Android precisam ser criados com um conjunto de ferramentas LLVM. Com o GKI, a cadeia de ferramentas LLVM usada para criar produtos os kernels e os módulos do fornecedor devem gerar a mesma ABI que o conjunto de ferramentas do LLVM da O AOSP e os parceiros precisam garantir que o KMI seja compatível com o kernel de GKI. Recomendamos usar as ferramentas de build disponíveis, já que elas oferecem as melhor compatibilidade.

Qual é a próxima etapa?