Visão geral do kernel

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
Figura 1. Arquitetura da GKI

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?