O kernel do Android é baseado em um kernel do Linux com suporte de longo prazo (LTS) upstream. No Google, os kernels LTS são combinados com patches específicos do Android para formar os kernels comuns do Android (ACKs).
Os ACKs são criados no repositório kernel/common. Esse repositório é um superconjunto do kernel do Linux upstream, com patches adicionais específicos do Android.
ACKs 5.10 e versões mais recentes também são conhecidos como kernels de *imagem genérica do kernel (GKI)*. Os kernels GKI oferecem suporte à separação do código genérico do kernel principal independente de hardware e dos módulos GKI dos módulos do fornecedor específicos do hardware.
A interação entre o kernel da GKI e os módulos do fornecedor é ativada pela interface do módulo do kernel (KMI), que consiste em listas de símbolos que identificam as funções e os dados globais necessários para os módulos do fornecedor. A Figura 1 mostra a arquitetura do kernel GKI e do módulo do fornecedor:
Figura 1. Arquitetura do kernel GKI e do módulo do fornecedor.
Glossário do kernel
Confira abaixo os termos usados em toda a documentação do kernel.
Tipos de kernel
- Kernel comum do Android (ACK)
- Um kernel que é downstream de um kernel LTS e inclui patches importantes para a comunidade Android. Esses patches não foram mesclados ao kernel principal do Linux ou aos kernels GKI de longo prazo.
Kernels com versões 5.10 e mais recentes também são chamados de kernels de Generic Kernel Image (GKI).
- Kernel do Android Open Source Project (AOSP)
- Consulte Kernel comum do Android.
Não é possível fazer backport dos recursos do Android 12 para kernels 4.19. O conjunto de recursos seria semelhante a um dispositivo lançado com o 4.19 no Android 11 e atualizado para o Android 12.
- Kernel de imagem genérica do kernel (GKI)
Qualquer kernel ACK 5.10 e mais recente(somente aarch64). O kernel da GKI tem estas duas partes:
Kernel genérico: a parte do kernel da GKI que é comum a todos os dispositivos.
Módulos GKI: módulos do kernel criados pelo Google que podem ser carregados dinamicamente em dispositivos quando aplicável. Esses módulos são criados como artefatos do kernel da GKI e são entregues com a GKI como o arquivo
system_dlkm_staging_archive.tar.gz
. Os módulos de GKI são assinados pelo Google usando o par de chaves de tempo de build do kernel e são compatíveis apenas com o kernel de GKI com que foram criados.
- Kernel da interface do módulo do kernel (KMI)
Consulte Kernel GKI.
- Kernel com suporte de longo prazo (LTS)
Um kernel do Linux com suporte de dois a seis anos. Os kernels LTS são lançados uma vez por ano e são a base de cada um dos kernels comuns do Android do Google.
Tipos de ramificação
- Ramificação do kernel ACK KMI
- O branch para o qual os kernels de GKI são criados. Os nomes das ramificações correspondem
às versões do kernel, como
android15-6.6
. - Android-mainline
- A ramificação de desenvolvimento principal para recursos do Android. Quando um novo kernel LTS é declarado upstream, o novo kernel GKI correspondente é ramificado do android-mainline.
Linux mainline: a principal ramificação de desenvolvimento para os kernels upstream do Linux, incluindo kernels LTS.
Outros termos
- Imagem de inicialização certificada
- O kernel entregue em formato binário (
boot.img
) e atualizado no dispositivo. Essa imagem é considerada certificada porque contém certificados incorporados. Assim, o Google pode verificar se o dispositivo é enviado com um kernel certificado pelo Google. - Módulo de kernel carregável dinamicamente (DLKM)
- Um módulo que pode ser carregado dinamicamente durante a inicialização do dispositivo, dependendo das necessidades dele. A GKI e os módulos do fornecedor são dois tipos de DLKMs. Os DLKMs são
lançados na forma
.ko
e podem ser drivers ou fornecer outras funcionalidades do kernel. - Projeto do GKI
- Um projeto do Google que aborda a fragmentação do kernel separando a funcionalidade comum do kernel principal do SoC específico do fornecedor e o suporte de 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 de uma árvore de origem ACK e adequada para ser gravada na partição de inicialização de um dispositivo Android.
- Interface do módulo do kernel (KMI)
- Uma interface entre o kernel GKI e os módulos do fornecedor, permitindo que os módulos do fornecedor sejam atualizados de forma independente do kernel GKI. Essa interface consiste em funções do kernel e dados globais que foram identificados como dependências de fornecedor/OEM usando listas de símbolos por parceiro.
- Módulo de 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 do fornecedor é um tipo de módulo do kernel carregável dinamicamente.
A seguir
Se você não tem experiência com o desenvolvimento de kernel do Android, comece lendo o seguinte:
- Kernels estáveis de longo prazo: informações sobre kernels LTS upstream que alimentam os ACKs.
- Kernels comuns do Android: informações básicas sobre ACKs.
Se você não tem experiência com o desenvolvimento do kernel GKI, comece lendo Desenvolvimento do GKI.