Perguntas frequentes sobre o kernel do Android

Este documento contém perguntas frequentes sobre o kernel do Android, também conhecido como kernel Generic Kernel Image (GKI). Se você não estiver familiarizado com a terminologia do kernel GKI e GKI, consulte a visão geral do kernel .

As listas de símbolos da Kernel Module Interface (KMI) podem ser alteradas em um kernel estável?

As alterações que não afetam o KMI existente podem ser adicionadas aos kernels que estão congelados. Essas alterações incluem novas funções exportadas e entradas na lista de símbolos. Para obter detalhes, consulte Gerenciando listas de símbolos .

Posso alterar as estruturas usadas pelos módulos do fornecedor em um kernel estável?

As estruturas que fazem parte de uma interface KMI não podem ser alteradas em kernels com uma KMI congelada. Antes do congelamento do KMI, essas estruturas podem ser alteradas.

Posso alterar o kernel desde que não interrompa a compatibilidade binária/fonte?

As alterações que não afetam o KMI podem ser feitas conforme descrito em patches específicos do Android .

Como o GKI lida com a configuração do kernel?

Para obter informações sobre a configuração do kernel, consulte Alterações no gki_defconfig .

Como lidar com correções de bugs upstream para substituições de módulos GKI existentes?

Se você criar um módulo de fornecedor com base em um driver no Android Common Kernel (ACK) , cabe a você garantir que as correções de bugs do upstream e do ACK sejam propagadas para seu módulo. Geralmente, é de seu interesse usar o kernel GKI e os módulos GKI sem modificação para que essas atualizações sejam fornecidas de forma consistente pelo Google.

Existem testes específicos para GKI?

Existem testes do Vendor Test Suite (VTS) que verificam se uma versão certificada do GKI está instalada e também para aplicar os requisitos do GKI por versão. Por exemplo, existem testes VTS do Android 12 para o cabeçalho de inicialização v3 e para verificar a existência de partições necessárias em um dispositivo executando um kernel 5.10.

Como crio o arquivo de fragmento defconfig do projeto para compilações de dispositivos?

Muitos dispositivos compatíveis com GKI usam um fragmento de configuração para descrever as opções de configuração necessárias, além de gki_defconfig , para criar os módulos do fornecedor. Exemplos que fazem parte da base de código ACK incluem Cuttlefish e DB845c. Não há como evitar algum exame manual das opções de configuração para otimizar o fragmento, mas scripts/diffconfig das fontes do kernel são úteis para comparar os resultados de gki_defconfig e gki_defconfig+device.fragment .

Existe uma solução alternativa para o tratamento do modprobe - e _ como equivalentes?

A página de manual do modprobe contém esta descrição: " O modprobe adiciona ou remove de forma inteligente um módulo do kernel Linux: observe que, por conveniência, não há diferença entre _ e - nos nomes dos módulos (a conversão automática de sublinhado é executada)." A equipe da GKI adere à convenção upstream padrão, portanto, as ferramentas do fornecedor ou as convenções de nomenclatura do módulo devem levar essa adesão em consideração.

Como habilito o debugfs para uso interno?

Para obter detalhes sobre como habilitar debugfs, consulte recursos de depuração downstream intrusivos .

Como posso resolver ABIs incompatíveis entre o kernel GKI com uma configuração de módulo específica habilitada?

ABIs incompatíveis entre o kernel GKI e a configuração do módulo representam uma dependência implícita de configuração do módulo, em que habilitar um módulo faz com que uma configuração binária seja incorporada à imagem do kernel resultante. Entre em contato com a equipe do kernel do Android ( kernel-team@android.com ) para determinar um caminho a seguir. Depois que a lista de símbolos for determinada, crie um bug no Issue Tracker e carregue uma alteração na lista de símbolos.