É 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ãoO KMI só é estável dentro da mesma versão do LTS e do Android de um kernel. como
android13-5.10
,android12-5.10
ouandroid13-5.15
.- Nenhuma estabilidade de KMI é mantida para o
android-mainline
.
- Nenhuma estabilidade de KMI é mantida para o
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?
Para instruções sobre como criar o kernel usando o processo de build hermético e do conjunto de ferramentas LLVM, consulte Crie kernels.
Para instruções sobre como monitorar a ABI e corrigir problemas, consulte Monitoramento de ABI do kernel do Android