Projet GKI (Generic Kernel Image)

Cette page décrit le projet d'image de kernel générique (GKI) et comment il améliore la stabilité et la sécurité d'Android.

Historique

Chaque appareil Android a besoin d'un kernel de production. Avant GKI, les noyaux étaient personnalisés et basés sur le noyau commun Android (ACK), avec des modifications spécifiques à l'appareil apportées par les fournisseurs de SoC (System on Chip) et les OEM.

Cette personnalisation peut entraîner jusqu'à 50% du code du noyau en dehors de l'arborescence, et non à partir des noyaux Linux ou des ACK en amont. Par conséquent, la nature personnalisée des noyaux pré-GKI a entraîné une fragmentation importante des noyaux.

Coûts de fragmentation

La fragmentation du noyau a plusieurs effets négatifs sur la communauté Android.

Les mises à jour de sécurité sont fastidieuses

Les correctifs de sécurité indiqués dans le bulletin de sécurité Android (ASB) doivent être rétroportés dans chacun des noyaux de l'appareil. Cependant, en raison de la fragmentation du noyau, il est extrêmement coûteux de propager les correctifs de sécurité aux appareils Android sur le terrain.

Fusion difficile des mises à jour prises en charge à long terme

Les versions Long-Term Supported (LTS) incluent des correctifs de sécurité et d'autres corrections de bugs critiques. Le fait de rester à jour avec les versions LTS s'est avéré être le moyen le plus efficace de fournir des correctifs de sécurité. Sur les appareils Pixel, 90% des problèmes de sécurité du noyau signalés dans l'ASB ont déjà été corrigés pour les appareils qui restent à jour.

Toutefois, avec toutes les modifications personnalisées dans les noyaux de l'appareil, il est difficile de simplement fusionner les correctifs LTS dans les noyaux de l'appareil.

Empêcher les mises à niveau de la version de la plate-forme Android

La fragmentation rend difficile l'ajout de nouvelles fonctionnalités Android nécessitant des modifications du noyau aux appareils sur le terrain. Le code du framework Android devait tenir compte des différentes variantes du noyau et ne pouvait pas s'appuyer sur les nouvelles fonctionnalités Android implémentées dans le noyau. Cela a ralenti l'innovation et a augmenté la taille et la complexité du code.

Difficulté à contribuer aux modifications du noyau dans Linux en amont

La méthode fragmentée d'extraction des correctifs dans les noyaux de production a entraîné un retard pouvant aller jusqu'à 18 mois entre le moment où une version LTS était disponible en amont et celui où elle était installée sur un appareil. Ce long délai entre la publication du kernel en amont et les produits rend difficile pour la communauté Android de fournir les fonctionnalités et les pilotes nécessaires aux kernels en amont. Au moment où un utilisateur envoyait des suggestions d'améliorations, le codebase avait changé, ce qui rendait difficile de montrer la pertinence du correctif.

Résoudre la fragmentation: image de noyau générique

Le projet GKI (Generic Kernel Image) résout la fragmentation du noyau en unifiant le noyau principal et en transférant la prise en charge du SoC et de la carte du noyau principal vers des modules fournisseurs pouvant être chargés. GKI présente également une interface de module de noyau (KMI) stable pour les modules du fournisseur, ce qui permet de mettre à jour les modules et le noyau indépendamment. Voici quelques caractéristiques du kernel GKI:

  • Le noyau GKI est créé à partir des sources ACK.
  • Le noyau GKI est un binaire à noyau unique, plus des modules chargeables associés par architecture et par version LTS.
  • Le noyau GKI est testé avec toutes les versions de la plate-forme Android compatibles avec l'ACK associé. Aucune fonctionnalité n'est abandonnée pendant la durée de vie d'une version du kernel GKI.
  • Le kernel GKI expose un KMI stable aux pilotes dans un LTS donné.
  • Le noyau GKI ne contient pas de code spécifique au SoC ni à la carte.

Pour obtenir une image de l'architecture du kernel GKI, consultez la présentation du kernel.

Image courante

À partir d'Android 12, les appareils livrés avec le kernel 5.10 ou version ultérieure doivent être livrés avec le kernel GKI. Les builds de versions de l'image du noyau générique (GKI) sont régulièrement mis à jour avec des corrections de bugs critiques et des versions LTS. Étant donné que la stabilité binaire est maintenue pour le KMI, vous pouvez installer ces images de démarrage sans modifier les images du fournisseur. Le projet GKI a les objectifs suivants:

  • N'introduisez pas de régressions significatives en termes de performances ou d'alimentation lorsque vous remplacez le kernel du produit par le kernel GKI.
  • Permettre aux partenaires de fournir des correctifs de sécurité du noyau et des correctifs de bugs sans l'intervention du fournisseur
  • Réduire le coût de la mise à niveau de la version majeure du kernel pour les appareils
  • Gérez un seul binaire de kernel GKI par architecture en mettant à jour les versions du kernel avec un processus de mise à niveau clair.