O kernel do Android é baseado em um kernel Linux Long Term Supported (LTS) upstream. No Google, os kernels LTS são combinados com patches específicos do Android para formar o que é conhecido como Android Common Kernels (ACKs) .
Os ACKs mais recentes (versão 5.4 e superior) também são conhecidos como kernels GKI . Os kernels GKI suportam a separação do código do kernel genérico independente de hardware e dos módulos GKI dos módulos de fornecedores específicos de hardware.
O kernel GKI interage com módulos de fornecedores específicos de hardware contendo sistema em um chip (SoC) e código específico de placa. A interação entre o kernel GKI e os módulos do fornecedor é habilitada pela Kernel Module Interface (KMI), que consiste em listas de símbolos que identificam as funções e os dados globais exigidos pelos módulos do fornecedor. A Figura 1 mostra o kernel GKI e a arquitetura do módulo do fornecedor:

Glossário do kernel
Esta seção contém termos usados em toda a documentação do kernel.
tipos de kernel
- Kernel comum do Android (ACK)
- Um kernel downstream de um kernel LTS e inclui patches de interesse para a comunidade Android que não foram mesclados na linha principal do Linux ou nos kernels LTS (Long Term Supported). Os ACKs mais recentes (versão 5.4 e superior) também são conhecidos como kernels GKI, pois suportam a separação de código de Kernel genérico agnóstico de hardware e módulos GKI agnósticos de hardware.
- Kernel do Android Open Source Project (AOSP)
- Consulte Kernel comum do Android.
- Kernel do recurso
- Um kernel para o qual os recursos de lançamento da plataforma são garantidos para serem implementados. Por exemplo, no Android 12, os dois kernels de recursos eram android12-5.4 e android12-5.10. Os recursos do Android 12 não podem ser transferidos para kernels 4.19; o conjunto de recursos seria semelhante a um dispositivo lançado com 4.19 em R e atualizado para S).
- núcleo genérico do kernel
- A parte do kernel GKI que é comum em todos os dispositivos.
- Kernel de imagem de kernel genérico (GKI)
- Qualquer kernel ACK mais recente (5.4 e superior) (atualmente apenas aarch64). Este kernel tem duas partes: o núcleo do kernel GKI com código comum em todos os dispositivos e módulos GKI desenvolvidos pelo Google que podem ser carregados dinamicamente em dispositivos quando aplicável.
- Kernel Module Interface (KMI) kernel
- Consulte Kernel GKI .
- Kernel de lançamento
- Um kernel válido para iniciar um dispositivo para uma determinada versão da plataforma Android. Por exemplo, no Android 12, os kernels de inicialização válidos eram 4.19, 5.4 e 5.10.
- Kernel com suporte de longo prazo (LTS)
- Um kernel do Linux com suporte por 2 a 6 anos. Os kernels LTS são lançados uma vez por ano e são a base para cada um dos ACKs do Google.
Tipos de filiais
- Ramificação do kernel ACK KMI
- A ramificação para a qual os kernels GKI são criados. Por exemplo, android12-5.10 e android13-5.15.
- Android-mainline
- O principal ramo de desenvolvimento para recursos do Android. Quando um novo kernel LTS é declarado upstream, o novo kernel GKI correspondente é ramificado de android-mainline.
- Linha principal do Linux
- O ramo de desenvolvimento primário para os kernels upstream do Linux, incluindo os kernels LTS.
Outros termos
- Imagem de inicialização certificada
- O kernel entregue em formato binário (
boot.img
) e flasheado no dispositivo. Esta imagem é certificada no sentido de que contém certificados incorporados para que o Google possa verificar se o dispositivo vem com um kernel certificado pelo Google. - Módulo de kernel dinamicamente carregável (DLKM)
- Um módulo que pode ser carregado dinamicamente durante a inicialização do dispositivo, dependendo das necessidades do dispositivo. GKI e módulos de fornecedores são ambos tipos de DLKMs. Os DLKMs são lançados no formato
.ko
e podem ser drivers ou fornecer outras funcionalidades do kernel. - Projeto GKI
- Um projeto do Google abordando a fragmentação do kernel, separando a funcionalidade do núcleo comum do SoC específico do fornecedor e o suporte da placa em módulos carregáveis.
- Imagem Genérica do Kernel (GKI)
- Uma imagem de inicialização certificada pelo Google que contém um kernel GKI criado a partir de uma árvore de origem ACK e é adequada para ser atualizada na partição de inicialização de um dispositivo Android.
- KMI
- Uma interface entre o kernel GKI e os módulos do fornecedor, permitindo que os módulos do fornecedor sejam atualizados independentemente do kernel GKI. Essa interface consiste em funções de kernel e dados globais que foram identificados como dependências de fornecedores/OEM usando listas de símbolos por parceiro.
- Módulos GKI
- Módulos de kernel criados pelo Google que podem ser carregados dinamicamente em dispositivos, quando aplicável. Esses módulos são construídos como artefatos do kernel GKI e são fornecidos juntamente com o GKI como o arquivo
system_dlkm_staging_archive.tar.gz
. Os módulos GKI são assinados pelo Google usando o par de chaves de tempo de compilação do kernel e são compatíveis apenas com o kernel GKI com o qual foram criados. - Módulo do fornecedor
- Um módulo específico de hardware desenvolvido por um parceiro e que contém SoC e funcionalidade específica do dispositivo. Um módulo de fornecedor é um tipo de módulo de kernel dinamicamente carregável.
Qual é o próximo?
- Se você é novo no desenvolvimento do kernel do Android, talvez queira começar lendo o seguinte:
- Kernels estáveis de longo prazo - Histórico de kernels LTS upstream que alimentam ACKs.
- Kernels comuns do Android - histórico de ACKs.
- Se você é novo no desenvolvimento do kernel GKI, comece lendo GKI development .
- Se você estiver usando uma versão do kernel 4.19 ou anterior e estiver procurando por documentação relacionada, consulte a seção Visão geral dos kernels anteriores (<=4.19) .