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