Visão geral do kernel

O kernel do Android é baseado em um kernel Linux Long Term Supported (LTS) upstream encontrado em . 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 , pois suportam a separação de código Genérico Core Kernel independente de hardware e módulos GKI independentes 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: Kernel GKI e arquitetura de módulo de fornecedor

Figura 1. Kernel GKI e 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 que é downstream de um kernel LTS e inclui patches de interesse para a comunidade Android que não foram mesclados em kernels Linux mainline ou Long Term Supported (LTS). 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 de recursos
Um kernel para o qual os recursos de versão 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 retroportados para kernels 4.19; o conjunto de recursos seria semelhante a um dispositivo lançado com 4.19 no R e atualizado para o S).
kernel do núcleo genérico
A parte do kernel GKI que é comum em todos os dispositivos.
Kernel de imagem genérica do kernel (GKI)
Qualquer kernel ACK mais recente (5.4 e superior) (atualmente apenas aarch64). Esse kernel tem duas partes: o kernel GKI central com código comum em todos os dispositivos e módulos de kernel GKI desenvolvidos pelo Google que podem ser carregados dinamicamente nos dispositivos quando aplicável.
Kernel Module Interface (KMI) kernel
Veja kernel GKI .
Iniciar Kernel
Um kernel que é válido para iniciar um dispositivo para uma determinada versão da plataforma Android. Por exemplo, no Android 12, os kernels de lançamento válidos eram 4.19, 5.4 e 5.10.
Kernel com suporte a longo prazo (LTS)
Um kernel 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 ramificação

Ramo do kernel ACK KMI
A ramificação para a qual os kernels GKI são construídos. Por exemplo, android12-5.10 e android13-5.15.
Android-principal
A ramificação principal de desenvolvimento para recursos do Android. Quando um novo kernel LTS é declarado upstream, o novo kernel GKI correspondente é ramificado do android-mainline.
Linux principal
A principal ramificação 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 atualizado 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 ambos tipos de DLKMs. Os DLKMs são lançados no formato .ko e podem ser drivers ou podem 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 é adequado para ser atualizado 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 do kernel e dados globais que foram identificados como dependências de fornecedor/OEM usando listas de símbolos por parceiro.
Módulo do kernel GKI
Um módulo carregável dinamicamente criado pelo Google que pode ser carregado dinamicamente em dispositivos quando aplicável. Esses módulos são construídos com o kernel GKI e são entregues junto com o GKI como a imagem system_dlkm . Os módulos do kernel 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 do núcleo genérico com o qual foram criados. Os módulos do kernel GKI são um tipo de DLKM
.
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 carregável dinamicamente.

Qual é o próximo?