Projeto de imagem genérica do kernel (GKI, na sigla em inglês)

Um kernel de produto, também conhecido como kernel do dispositivo ou kernel do OEM, é a que você envia ao dispositivo. Antes da GKI, o kernel do produto era e pode ser derivado de uma série de mudanças do kernel upstream. A Figura 1 mostra como o kernel adições geram um kernel do produto (kernel de OEM/dispositivo):

Construção do kernel do produto pré-GKI

Figura 1. Construção do kernel do produto pré-GKI.

  1. O kernel Linux com suporte de longo prazo (LTS, na sigla em inglês) de kernel.org foi modificado com patches específicos do Android, resultando em um Kernel comum do Android (ACK).
  2. O ACK foi modificado por fornecedores que adicionaram suporte ao seu system-on-a-chip (SoC). Os fornecedores também podem incluir otimizações de desempenho ou energia. A é chamado de kernel do fornecedor.
  3. Por fim, o kernel do fornecedor foi modificado ainda mais pelos OEMs, adicionando mais drivers de dispositivo e personalizações que eles consideram necessários. O kernel resultante é chamado de kernel do produto.

Todas essas modificações podem resultar em até 50% código do kernel sendo código fora da árvore e não de kernels Linux ou ACKs upstream. Antes da GKI, quase todos os dispositivos tinham um kernel personalizado que resultava em a fragmentação.

Custos de fragmentação

A fragmentação do kernel tem vários efeitos negativos na comunidade Android.

Atualizações de segurança são trabalhosas

Os patches de segurança citados na Boletim de segurança do Android (ASB) precisa ter backport em cada um dos kernels do dispositivo. No entanto, devido ao kernel da nuvem, é extremamente caro propagar correções de segurança para dispositivos Android em campo.

Dificuldade em combinar atualizações com suporte de longo prazo

As versões com suporte de longo prazo (LTS) incluem correções de segurança e outras e correções de bugs críticos. Manter-se atualizado com as versões do LTS provou ser a forma mais eficaz de fornecer correções de segurança. Em dispositivos Pixel, era descobriu que 90% dos problemas de segurança do kernel relatados no ASB tinham já corrigidos para dispositivos que estão sempre atualizados.

No entanto, com todas as modificações personalizadas nos kernels do dispositivo, é é difícil mesclar as correções de LTS nos kernels do dispositivo.

Inibir upgrades de versão da plataforma Android

A fragmentação dificulta para novos recursos do Android que exigem kernel mudanças a serem adicionadas aos dispositivos em campo. O código do Android Framework deve presumir que até cinco versões do kernel tenham suporte e que o kernel não mude foram feitas para a nova versão da plataforma (Android 10 oferece suporte aos kernels 3.18, 4.4, 4.9, 4.14 e 4.19, que em alguns casos não foram aprimorados com novos recursos desde o Android 8 em 2017).

Dificuldade em contribuir com alterações do kernel de volta para o Linux upstream

Com todas as alterações sendo feitas no kernel, a maioria dos dispositivos principais com uma versão do kernel que já tem pelo menos 18 meses. Por exemplo, o O kernel 4.14 foi lançado pela kernel.org em novembro de 2017 e as Os primeiros smartphones Android com kernels 4.14 foram lançados entre o primeiro semestre de 2019.

Esse longo atraso entre o lançamento do kernel upstream e os produtos dificulta para que a comunidade Android alimente os recursos e drivers necessários no upstream grãos

Corrigir a fragmentação: imagem genérica do kernel

O projeto de imagem genérica do kernel (GKI, na sigla em inglês) aborda a fragmentação do kernel. Unificar o kernel principal e mover o SoC e o suporte da placa para fora dele em módulos de fornecedor carregáveis. A GKI também apresenta um módulo de kernel estável interface (KMI) para módulos de fornecedores, de modo que os módulos e o kernel possam ser atualizados de forma independente. Estas são algumas características do kernel de GKI:

  • O kernel de GKI é criado com base nas origens ACK.
  • O kernel de GKI é um binário de kernel único com módulos carregáveis associados por arquitetura, por versão LTS (atualmente apenas arm64 para android11-5.4 e android12-5.4).
  • O kernel de GKI é testado com todas as versões da Plataforma Android que são compatível com o o ACK associado. Não há descontinuação de recursos durante o ciclo de vida de uma GKI versão do kernel.
  • O kernel de GKI expõe um KMI estável aos drivers em um determinado LTS.
  • O kernel de GKI não contém código específico do SoC ou da placa.

Para conferir uma imagem da arquitetura GKI, consulte o Visão geral do kernel.

A GKI é uma alteração complexa lançada em vários estágios, começando com os kernels v5.4 na versão da plataforma Android 11.

Há dois estágios de GKI:

  • A GKI 1.0 foi lançada no Android 11 para dispositivos com 5.4. A GKI 1.0 se aplica a todos os dispositivos fornecidos com kernels 5.4, até mesmo os lançado com o Android 12 ou Android 13.
  • A GKI 2.0 foi lançada no Android 12 para dispositivos com kernels 5.10 e é o novo padrão para todos os dispositivos que vêm com a versão 5.10 ou kernels posteriores.

GKI 1.0

Na GKI 1.0, os dispositivos lançados com a versão 5.4 do kernel precisam passar pelo teste de GKI (Android 11 e versões mais recentes da plataforma). As metas de GKI 1.0 incluem o seguinte:

  • Evite regressões no Conjunto de testes de fornecedor (VTS) ou Conjunto de teste de compatibilidade (CTS) ao substituir o kernel do produto pelo de GKI.
  • Reduza o trabalho do parceiro de manter o kernel atualizado com o AOSP aos kernels comuns.
  • Incluir as principais mudanças do Android nos kernels para dispositivos que estão sendo atualizados e lançados com as novas versões do Android.
  • Não prejudique o espaço do usuário do Android.
  • Separar componentes específicos de hardware do kernel principal como módulos carregáveis.
.

Para conferir a documentação do GKI 1.0, acesse Seção GKI 1.0.

GKI 2.0

Na GKI 2.0, os dispositivos lançados com a versão 5.10 ou mais recente do kernel precisam ser disponibilizados com o kernel de GKI (começando com o Android 12). Inicialização assinada as imagens são disponibilizadas e atualizadas regularmente com o LTS e correções de bugs críticos. Como a estabilidade do binário é mantida para o KMI, você pode instalar esses pacotes sem alterar as imagens do fornecedor. As metas de GKI 2.0 incluem seguinte:

  • Não apresente regressões significativas de desempenho ou energia ao substituir do kernel do produto com o kernel de GKI.
  • Permita que os parceiros forneçam correções de segurança do kernel e correções de bugs sem fornecedor envolvimento do cliente.
  • Reduza o custo de atualização da versão principal do kernel para dispositivos (por exemplo, da v5.10 para o kernel do LTS de 2021).
  • Manter um único binário de kernel de GKI por arquitetura atualizando o kernel com um processo claro de upgrade.
.

O GKI 2.0 representa o estado mais atual dos kernels do Android. Kernel documentação fora da GKI 1.0 e Kernels anteriores (<=4,19) as subseções refletem a arquitetura GKI 2.0.