Visão geral do kernel

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) .

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 do fornecedor 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 da 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:

Arquitetura GKI
Figura 1. Arquitetura 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 Android que não foram mesclados na linha principal do Linux ou nos kernels com suporte de longo prazo (LTS). 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 independente de hardware e módulos GKI independentes de hardware.
Kernel do Android Open Source Project (AOSP)
Consulte Kernel comum do Android.
Kernel de recursos
Um kernel para o qual os recursos de lançamento da plataforma serão implementados com garantia. 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 portados para kernels 4.19; o conjunto de recursos seria semelhante a um dispositivo lançado com 4.19 em R e atualizado para S).
kernel central genérico
A parte do kernel GKI que é comum a todos os dispositivos.
Kernel de imagem genérica do kernel (GKI)
Qualquer kernel ACK mais recente (5.4 e superior) (atualmente apenas aarch64). Este kernel tem duas partes: O kernel GKI principal com código comum a todos os dispositivos e módulos GKI desenvolvidos pelo Google que podem ser carregados dinamicamente em dispositivos quando aplicável.
Kernel da interface do módulo do kernel (KMI)
Consulte Kernel GKI .
Iniciar kernel
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 Linux com suporte de 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
O branch para o qual os kernels GKI são criados. Por exemplo, android12-5.10 e android13-5.15.
Linha principal do Android
O principal ramo de desenvolvimento de recursos do Android. Quando um novo kernel LTS é declarado upstream, o novo kernel GKI correspondente é ramificado da linha principal do Android.
Linha principal do Linux
O principal ramo de desenvolvimento para os kernels Linux upstream, incluindo kernels LTS.

Outros termos

Imagem de inicialização certificada
O kernel foi entregue em formato binário ( boot.img ) e instalado no dispositivo. Esta imagem é certificada no sentido de que contém certificados incorporados para que o Google possa verificar se o dispositivo é fornecido 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 do dispositivo. Os módulos GKI e de fornecedor são tipos de DLKMs. DLKMs são lançados no formato .ko e podem ser drivers ou fornecer outras funcionalidades do kernel.
Projeto GKI
Um projeto do Google que aborda a fragmentação do kernel, separando a funcionalidade central comum do kernel 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 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 fornecedor/OEM usando listas de símbolos por parceiro.
Módulos GKI
Módulos de kernel desenvolvidos 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 entregues junto 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 de fornecedor
Um módulo específico de hardware desenvolvido por um parceiro e que contém SoC e funcionalidades específicas do dispositivo. Um módulo de fornecedor é um tipo de módulo de kernel carregável dinamicamente.

Qual é o próximo?