Le projet Generic Kernel Image (GKI)

Un noyau de produit , également appelé noyau de périphérique ou noyau OEM , est le noyau que vous expédiez sur votre appareil. Avant GKI, le noyau du produit était dérivé d'une série de modifications du noyau en amont. La figure 1 montre comment les ajouts de noyau génèrent un noyau de produit (noyau OEM/périphérique) :

Construction du noyau du produit pré-GKI

Figure 1. Construction du noyau du produit pré-GKI.

  1. Le noyau Linux Long Term Supported (LTS) de kernel.org a été modifié avec des correctifs spécifiques à Android, ce qui a donné un Android Common Kernel (ACK) .
  2. L'ACK a été modifié par les fournisseurs qui ont ajouté la prise en charge de leur système sur puce (SoC). Les fournisseurs peuvent également ajouter des optimisations de performances ou de puissance. Le noyau résultant est appelé noyau du fournisseur .
  3. Enfin, le noyau du fournisseur a été modifié par les OEM avec des pilotes de périphérique supplémentaires et des personnalisations qu'ils jugent nécessaires. Le noyau résultant est appelé noyau de produit .

Toutes ces modifications peuvent avoir pour conséquence que jusqu'à 50 % du code du noyau soit du code hors arborescence et non des noyaux Linux ou ACK en amont. Avant GKI, presque tous les appareils possédaient un noyau personnalisé, ce qui entraînait une fragmentation du noyau.

Les coûts de la fragmentation

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

Les mises à jour de sécurité demandent beaucoup de travail

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

Difficile de fusionner les mises à jour prises en charge à long terme

Les versions LTS (Long-Term Supported) incluent des correctifs de sécurité et d'autres corrections de bogues critiques. 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, il a été découvert que 90 % des problèmes de sécurité du noyau signalés dans l'ASB avaient déjà été résolus pour les appareils qui restent à jour.

Cependant, avec toutes les modifications personnalisées apportées aux noyaux de périphérique, il est difficile de simplement fusionner les correctifs LTS dans les noyaux de périphérique.

Empêche 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 Android Framework doit supposer que jusqu'à cinq versions du noyau sont prises en charge et qu'aucune modification du noyau n'a été apportée pour la nouvelle version de la plate-forme (Android 10 prend en charge les noyaux 3.18, 4.4, 4.9, 4.14 et 4.19, qui dans certains cas n'ont pas été enrichi de nouvelles fonctionnalités depuis Android 8 en 2017).

Difficile de contribuer aux modifications du noyau vers Linux en amont

Avec toutes les modifications apportées au noyau, la plupart des appareils phares sont livrés avec une version du noyau datant déjà d'au moins 18 mois. Par exemple, le noyau 4.14 a été publié par kernel.org en novembre 2017 et les premiers téléphones Android utilisant les noyaux 4.14 ont été expédiés au printemps 2019.

Ce long délai entre la sortie du noyau en amont et les produits rend difficile pour la communauté Android d'intégrer les fonctionnalités et les pilotes nécessaires dans les noyaux en amont.

Correction de la fragmentation : image générique du noyau

Le projet Generic Kernel Image (GKI) aborde la fragmentation du noyau en unifiant le noyau principal et en déplaçant la prise en charge des SoC et des cartes du noyau principal vers des modules chargeables du fournisseur. GKI présente également une interface de module de noyau (KMI) stable pour les modules du fournisseur, afin que les modules et le noyau puissent être mis à jour indépendamment. Certaines caractéristiques du noyau GKI sont :

  • Le noyau GKI est construit à partir des sources ACK.
  • Le noyau GKI est un binaire à noyau unique plus des modules chargeables associés par architecture et par version LTS (actuellement uniquement arm64 pour android11-5.4 et android12-5.4 ).
  • Le noyau GKI est testé avec toutes les versions de la plate-forme Android prises en charge pour l'ACK associé. Il n'y a aucune dépréciation de fonctionnalité pendant la durée de vie d'une version du noyau GKI.
  • Le noyau GKI expose un KMI stable aux pilotes au sein d'un LTS donné.
  • Le noyau GKI ne contient pas de code spécifique au SoC ou à la carte.

Pour une image de l'architecture GKI, reportez-vous à la présentation du noyau .

GKI est un changement complexe qui a été déployé en plusieurs étapes, à commencer par les noyaux v5.4 de la version de la plateforme Android 11.

Il existe actuellement deux étapes GKI :

  • GKI 1.0 a été introduit dans Android 11 pour les appareils dotés de noyaux 5.4. GKI 1.0 s'applique à tous les appareils livrés avec les noyaux 5.4, même ceux lancés avec Android 12 ou Android 13.
  • GKI 2.0 a été introduit dans Android 12 pour les appareils dotés de noyaux 5.10 et constitue la nouvelle norme pour tous les appareils livrés avec des noyaux 5.10 ou ultérieurs.

GKI 1.0

Dans GKI 1.0, les appareils lancés avec la version 5.4 du noyau doivent réussir les tests GKI (Android 11 et versions ultérieures de la plate-forme). Les objectifs de GKI 1.0 sont les suivants :

  • Évitez les régressions dans Vendor Test Suite (VTS) ou Compatibility Test Suite (CTS) lors du remplacement du noyau du produit par le noyau GKI.
  • Réduisez la charge des partenaires liée à la mise à jour de leur noyau grâce aux noyaux communs AOSP.
  • Incluez les modifications principales d'Android dans les noyaux pour la mise à niveau et le lancement des appareils avec les nouvelles versions d'Android.
  • Ne brisez pas l'espace utilisateur Android.
  • Séparez les composants spécifiques au matériel du noyau principal en tant que modules chargeables.

Pour la documentation GKI 1.0, consultez la section GKI 1.0 .

GKI 2.0

Dans GKI 2.0, les appareils lancés avec la version 5.10 ou supérieure du noyau doivent être livrés avec le noyau GKI (à partir d'Android 12). Des images de démarrage signées sont disponibles et mises à jour régulièrement avec LTS et des corrections de bogues critiques. La stabilité binaire étant maintenue pour le KMI, vous pouvez installer ces images de démarrage sans apporter de modifications aux images du fournisseur. Les objectifs de GKI 2.0 sont les suivants :

  • N'introduisez pas de régressions significatives de performances ou de puissance lors du remplacement du noyau du produit par le noyau GKI.
  • Permettez aux partenaires de fournir des correctifs de sécurité du noyau et des corrections de bogues sans implication du fournisseur.
  • Réduisez le coût de mise à jour de la version majeure du noyau pour les appareils (par exemple, de la v5.10 au noyau LTS 2021).
  • Maintenez un seul binaire de noyau GKI par architecture en mettant à jour les versions du noyau avec un processus de mise à niveau clair.

GKI 2.0 représente l'état le plus actuel des noyaux Android. La documentation du noyau en dehors des sous-sections GKI 1.0 et Noyaux précédents (<=4.19) reflète l'architecture GKI 2.0.