Perguntas frequentes sobre o kernel do Android

Este documento contém perguntas frequentes sobre o kernel do Android, também conhecido como kernel de imagem genérica do kernel (GKI, na sigla em inglês). 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 interface do módulo do kernel (KMI) 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?

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

Posso mudar o kernel sem quebrar 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 lidar com 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 Android Common Kernel (ACK), é sua responsabilidade garantir que as correções de bugs do upstream e do ACK sejam propagadas para seu módulo. Em geral, é melhor usar o kernel e os módulos do 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 Vendor Test Suite (VTS) que verificam se um build certificado do GKI está instalado e também para aplicar os requisitos do GKI por lançamento. Por exemplo, há 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 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 há como evitar um exame manual de algumas opções de configuração para otimizar o fragmento, mas scripts/diffconfig das fontes do kernel é útil para comparar os resultados de gki_defconfig e gki_defconfig+device.fragment.

Existe 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 maneira inteligente. Observe que, para facilitar, não há diferença entre _ e - nos nomes dos módulos (uma conversão automática de sublinhado é realizada)". A equipe da GKI segue a convenção upstream padrão. Portanto, as ferramentas do fornecedor ou as convenções de nomenclatura de módulos precisam levar isso 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 intrusiva downstream.

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

ABIs incompatíveis entre o kernel da GKI e a configuração do módulo representam uma dependência implícita da configuração do módulo, em que a ativação de 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 Rastreador de problemas e faça o upload de uma mudança na lista de símbolos.