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 o que são conhecidos como kernels comuns do Android (ACKs).
As ACKs mais recentes (versão 5.4 e mais recentes) também são conhecidas como kernels do GKI. Os kernels GKI oferecem suporte à separação do código do kernel principal genérico (link em inglês) independente do hardware e dos módulos GKI do módulos do fornecedor específicos do hardware.
O kernel da GKI interage com módulos do fornecedor específicos do hardware, que contêm um sistema em um chip (SoC) e um código específico da placa. A interação entre o kernel do GKI e os módulos do fornecedor é ativada pela Interface de Módulo do Kernel (KMI, na sigla em inglês), que consiste em listas de símbolos que identificam as funções e os dados globais necessários pelos módulos do fornecedor. A Figura 1 mostra o kernel da GKI e a arquitetura do módulo do fornecedor:
![Arquitetura do GKI](https://source.android.com/static/docs/core/architecture/images/generic-kernel-image-architecture.png?authuser=0&hl=pt-br)
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 que é downstream de um kernel LTS e inclui patches de interesse para a comunidade do Android que não foram mesclados nos kernels principais ou de suporte de longo prazo (LTS) do Linux. Os ACKs mais recentes (versão 5.4 e mais recentes) também são conhecidos como kernels GKI, porque oferecem suporte à separação do código do kernel genérico independente de hardware e de módulos GKI independentes 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 têm garantia de implementação. 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 devolvidos aos kernels 4.19. O conjunto de recursos seria semelhante ao de um dispositivo lançado com o 4.19 no Android 11 e atualizado para o Android 12.
- kernel genérico
- A parte do kernel do GKI que é comum a todos os dispositivos.
- Kernel da imagem genérica do kernel (GKI)
- Qualquer kernel ACK mais recente (5.4 e versões mais recentes) (atualmente, somente aarch64). Esse núcleo tem duas partes: o núcleo principal do GKI com código comum em todos os dispositivos e os módulos do GKI desenvolvidos pelo Google que podem ser carregados dinamicamente em dispositivos, quando aplicável.
- Kernel da interface de módulo do kernel (KMI, na sigla em inglês)
- Consulte Kernel de GKI.
- Kernel de inicialização
- Um kernel válido para iniciar um dispositivo em 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 Linux com suporte de 2 a 6 anos. Os kernels LTS são lançados uma vez por ano e são a base de cada um dos ACKs do Google.
Tipos de filiais
- Ramificação do kernel do ACK KMI
- O branch para o qual os kernels de GKI são criados. Por exemplo, android12-5.10 e android13-5.15.
- Android-mainline
- A principal ramificação de desenvolvimento para recursos do Android. Quando um novo kernel LTS é declarado upstream, o novo kernel do GKI correspondente é ramificado do android-mainline.
- Linha principal do Linux
- A ramificação de desenvolvimento principal 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 é certificada no sentido de que contém certificados incorporados para que o Google possa verificar se o dispositivo é enviado com um kernel certificado pelo Google. - Módulo de kernel carregável dinamicamente (DLKM, na sigla em inglês)
- 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 no formato
.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 do kernel principal comum do SoC específico do fornecedor e do suporte à 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 transmitida à partição de inicialização de um dispositivo Android.
- KMI
- Uma interface entre o kernel da GKI e os módulos do fornecedor, permitindo que os módulos do fornecedor sejam atualizados independentemente do kernel da GKI. Essa interface consiste em funções do kernel e dados globais que foram identificados como dependências do fornecedor/OEM usando listas de símbolos por parceiro.
- 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 enviados
junto com a GKI como o arquivo
system_dlkm_staging_archive.tar.gz
. Os módulos do GKI são assinados pelo Google usando o par de chaves do kernel no momento do build e são compatíveis apenas com o kernel GKI em que foram criados. - Módulo de fornecedor
- Um módulo específico para hardware desenvolvido por um parceiro e que contém a funcionalidade do SoC e do dispositivo. Um módulo do fornecedor é um tipo de módulo do kernel que pode ser carregado dinamicamente.
Quais são as próximas etapas?
- 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 ACKs.
- Kernels comuns do Android: informações gerais sobre ACKs.
- Se você não tem experiência com o desenvolvimento de kernel do GKI, comece lendo Desenvolvimento do GKI.