Projet GKI (Generic Kernel Image)

Cette page décrit le projet Generic Kernel Image (GKI) et explique comment il améliore la stabilité et la sécurité d'Android.

Historique

Chaque appareil Android a besoin d'un noyau de production. Avant GKI, les noyaux étaient personnalisés et basés sur le noyau commun Android (ACK, Android Common Kernel), avec des modifications spécifiques aux appareils apportées par les fournisseurs de systèmes sur une puce (SoC, System on Chip) et les OEM.

Cette personnalisation peut entraîner la présence de code hors arbre dans jusqu'à 50 % du code du noyau, et non de code provenant des noyaux Linux en amont ou des ACK. Ainsi, la nature personnalisée des noyaux pré-GKI a entraîné une fragmentation importante du noyau.

Coûts de la fragmentation

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

Les mises à jour de sécurité sont laborieuses

Les correctifs de sécurité cités dans le Bulletin sur la sécurité d'Android (ASB) doivent être rétroportés dans chacun des noyaux de l'appareil. Toutefois, en raison de la fragmentation du noyau, il est prohibitif de propager les correctifs de sécurité aux appareils Android sur le terrain.

Difficulté à fusionner les mises à jour LTS

Les versions LTS (Long-Term Supported) incluent des correctifs de sécurité et d'autres corrections de bugs critiques. Il s'est avéré que le meilleur moyen de fournir des correctifs de sécurité est de se tenir informé des versions LTS. Sur les appareils Pixel, il a été découvert que 90 % des problèmes de sécurité du noyau signalés dans le bulletin de sécurité Android avaient déjà été résolus pour les appareils qui restent à jour.

Toutefois, avec toutes les modifications personnalisées apportées aux noyaux des appareils, il est difficile de simplement fusionner les correctifs LTS dans les noyaux des appareils.

Empêcher les mises à niveau 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 entraîné une augmentation de la taille et de la complexité du code.

Difficulté à renvoyer les modifications du noyau à Linux en amont

La façon fragmentée d'intégrer les correctifs dans les noyaux de production entraînait un délai pouvant aller jusqu'à 18 mois entre le moment où une version LTS était disponible en amont et celui où elle était intégrée à un appareil. Ce long délai entre la publication du noyau en amont et les produits rend difficile pour la communauté Android l'intégration des fonctionnalités et des pilotes nécessaires dans les noyaux en amont. Au moment où un utilisateur a soumis des suggestions d'amélioration, la base de code avait changé, ce qui rendait difficile de montrer la pertinence du correctif.

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

Le projet Generic Kernel Image (GKI) s'attaque à la fragmentation du noyau en unifiant le noyau principal et en déplaçant la prise en charge du SoC et de la carte hors du noyau principal vers des modules de fournisseur pouvant être chargés. GKI présente également une interface de module de noyau (KMI) stable pour les modules de fournisseurs, ce qui permet de mettre à jour les modules et le noyau de manière indépendante. Voici quelques caractéristiques du noyau GKI :

  • Le noyau GKI est créé à partir des sources ACK.
  • Le noyau GKI est un binaire à noyau unique, ainsi que 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 obsolète pendant la durée de vie d'une version du noyau GKI.
  • Le noyau GKI expose une KMI stable aux pilotes dans une LTS donnée.
  • Le noyau GKI ne contient pas de code spécifique au SoC ni à la carte.

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

Image courante

À partir d'Android 12, les appareils équipés d'un noyau version 5.10 ou ultérieure doivent être fournis avec le noyau GKI. Les versions de compilation GKI (Generic Kernel Image) sont régulièrement mises à jour avec des correctifs LTS et des corrections de bugs critiques. É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 :

  • Ne pas introduire de régression significative des performances ou de la consommation d'énergie lors du remplacement du noyau du produit par le noyau GKI.
  • Permettre aux partenaires de fournir des correctifs de sécurité et des corrections de bugs au niveau du noyau sans l'intervention du fournisseur.
  • Réduire le coût de la mise à niveau de la version majeure du noyau pour les appareils.
  • Maintenez un seul binaire de noyau GKI par architecture en mettant à jour les versions du noyau avec une procédure de mise à niveau claire.