Perguntas frequentes sobre o kernel do Android

Este documento contém perguntas frequentes sobre o kernel do Android, também conhecido como kernel da imagem genérica do kernel (GKI, na sigla em inglês). Se você não estiver familiarizado com a terminologia do GKI e do kernel do GKI, consulte a Visão geral do kernel.

As listas de símbolos da interface do módulo do kernel (KMI, na sigla em inglês) podem ser alteradas em um kernel estável?

As mudanças que não afetam a KMI atual podem ser adicionadas a kernels congelados. Essas mudanças incluem novas funções exportadas e entradas de lista de símbolos. Para mais detalhes, consulte Gerenciar listas de símbolos.

Posso mudar as estruturas usadas por 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 da KMI, essas estruturas podem ser alteradas.

Posso mudar o kernel, desde que eu não quebre a compatibilidade binária ou de origem?

As mudanças que não afetam a KMI podem ser feitas conforme descrito em patches específicos do Android.

Como o GKI processa a configuração do kernel?

Para informações sobre a configuração do kernel, consulte as Mudanças em gki_defconfig.

Como faço para processar correções de bugs upstream para substituições de módulos GKI atuais?

Se você criar um módulo do fornecedor com base em um driver no kernel comum do Android (ACK, na sigla em inglês), será sua responsabilidade garantir que as correções de bugs do ACK e upstream sejam propagadas para o módulo. Geralmente, é melhor usar o kernel e os módulos GKI sem modificação para que essas atualizações sejam fornecidas de forma consistente pelo Google.

Há testes específicos do GKI?

Há testes do pacote de testes de fornecedor (VTS, na sigla em inglês) que verificam se um build GKI certificado está instalado e também para aplicar os requisitos do GKI por versão. Por exemplo, há testes do 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 que executa um kernel 5.10.

Como faço para criar o arquivo de fragmento defconfig do projeto para builds 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 do ACK incluem Cuttlefish e DB845c. Não é possível evitar alguns exames manuais das opções de configuração para otimizar o fragmento, mas scripts/diffconfig das origens do kernel é útil para comparar os resultados de gki_defconfig e gki_defconfig+device.fragment.

Há uma solução alternativa para o modprobe tratar - e _ como equivalentes?

A página de manual do modprobe contém esta descrição: "modprobe adiciona ou remove um módulo do kernel do Linux de forma inteligente. Para sua conveniência, não há diferença entre _ e - em nomes de módulos (a conversão automática de sublinhado é realizada)." A equipe do GKI segue a convenção upstream padrão. Portanto, as ferramentas do fornecedor ou as convenções de nomenclatura de módulos precisam levar essa conformidade em consideração.

Como faço para ativar o debugfs para uso interno?

Para detalhes sobre como ativar o 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 ativada?

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