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:
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?
- Se você é novo no desenvolvimento do kernel do Android, talvez queira começar lendo o seguinte:
- Kernels estáveis de longo prazo - Background em kernels LTS upstream que alimentam ACKs.
- Kernels comuns do Android - Background em ACKs.
- Se você é novo no desenvolvimento do kernel GKI, comece lendo GKI development .
- Se você estiver usando uma versão de kernel 4.19 ou anterior e estiver procurando por documentação relacionada, consulte a seção Visão geral dos kernels anteriores (<=4.19) .