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

Esta página descreve o projeto de imagem genérica do kernel (GKI, na sigla em inglês) e como ele aumenta a estabilidade e melhora a segurança do Android.

Histórico

Todos os dispositivos Android precisam de um kernel de produção. Antes da GKI, os kernels eram personalizados e baseados no kernel comum do Android (ACK, na sigla em inglês), com mudanças específicas do dispositivo feitas por fornecedores de system on chip (SoC) e OEMs.

Essa personalização pode resultar em até 50% do código do kernel sendo fora da árvore e não de kernels do Linux ou ACKs upstream. Por isso, a natureza personalizada dos kernels anteriores ao GKI resultou em fragmentação significativa do kernel.

Custos da fragmentação

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

As atualizações de segurança exigem muito trabalho

Os patches de segurança citados no boletim de segurança do Android (ASB, na sigla em inglês) precisam ser repassados para cada um dos kernels do dispositivo. No entanto, devido à fragmentação do kernel, é muito caro propagar correções de segurança para dispositivos Android em campo.

É difícil mesclar atualizações de suporte a longo prazo

As versões Long Term Support (LTS) incluem correções de segurança e outras correções de bugs importantes. Manter-se atualizado com as versões LTS provou ser a maneira mais eficaz de fornecer correções de segurança. Em dispositivos Pixel, foi descoberto que 90% dos problemas de segurança do kernel relatados no ASB já foram corrigidos para dispositivos atualizados.

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

Inibir atualizações da versão da plataforma Android

A fragmentação dificulta a adição de novos recursos do Android que exigem mudanças no kernel aos dispositivos em campo. O código do Android Framework precisava considerar as diferentes variações do kernel e não podia depender de novos recursos do Android implementados no kernel. Isso abrandou a inovação e aumentou o tamanho e a complexidade do código.

É difícil contribuir com alterações do kernel no Linux upstream

A maneira fragmentada de extrair patches nos kernels de produção causou um atraso de até 18 meses entre o momento em que uma versão LTS ficou disponível upstream e o momento em que ela foi instalada em um dispositivo. Esse longo atraso entre a versão do kernel upstream e os produtos dificulta que a comunidade do Android alimente os recursos e drivers necessários nos kernels upstream. Quando um usuário enviava sugestões de melhorias, a base de código mudava, dificultando a demonstração da relevância do patch.

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

O projeto Generic Kernel Image (GKI) aborda a fragmentação do kernel ao unir o kernel principal e mover o SoC e o suporte de placa do kernel principal para módulos de fornecedores carregáveis. A GKI também apresenta uma interface estável do módulo do kernel (KMI, na sigla em inglês) para módulos de fornecedores. Assim, os módulos e o kernel podem ser atualizados de forma independente. Algumas características do kernel do GKI são:

  • O kernel do GKI é criado a partir das fontes do ACK.
  • O kernel GKI é um binário de kernel único, além de módulos carregáveis associados por arquitetura, por versão LTS.
  • O kernel do GKI é testado com todas as versões da plataforma Android que têm suporte para o ACK associado. Não há descontinuação de recursos para a vida útil de uma versão do kernel do GKI.
  • O kernel do GKI expõe um KMI estável aos drivers em um determinado LTS.
  • O kernel do GKI não contém código específico do SoC ou da placa.

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

Imagem comum

A partir do Android 12, os dispositivos enviados com a versão 5.10 ou mais recente do kernel precisam ser enviados com o kernel GKI. Os builds de lançamento da imagem genérica do kernel (GKI) são atualizados regularmente com correções de bugs críticos e LTS. Como a estabilidade binária é mantida para o KMI, é possível instalar essas imagens de inicialização sem fazer alterações nas imagens do fornecedor. O projeto GKI tem estes objetivos:

  • Não introduza regressões significativas de desempenho ou potência ao substituir o kernel do produto pelo kernel do GKI.
  • Permitir que os parceiros forneçam correções de segurança do kernel e correções de bugs sem a participação do fornecedor.
  • Reduza o custo de atualização da versão principal do kernel para dispositivos.
  • Mantenha um único binário do kernel da GKI por arquitetura atualizando as versões do kernel com um processo claro de upgrade.