Le projet Generic Kernel Image (GKI)

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Les noyaux communs Android (ACK) constituent la base de tous les noyaux de produits Android. Les noyaux de fournisseur et de périphérique sont en aval des ACK. Les fournisseurs ajoutent la prise en charge des SoC et des périphériques en modifiant le code source du noyau et en ajoutant des pilotes de périphérique. Ces modifications peuvent être importantes au point que jusqu'à 50% du code exécuté sur un périphérique est du code hors arbre et ne provient pas de Linux en amont ou de noyaux communs AOSP.

Ainsi, un noyau de périphérique est composé de :

  • En amont : le noyau Linux de kernel.org
  • AOSP : correctifs supplémentaires spécifiques à Android à partir des noyaux communs AOSP
  • Fournisseur : Correctifs d'activation et d'optimisation SoC et périphériques des fournisseurs
  • OEM/périphérique : pilotes de périphérique supplémentaires et personnalisations

Presque tous les appareils ont un noyau personnalisé. C'est la fragmentation du noyau.

La hiérarchie du noyau Android conduit à la fragmentation

Figure 1. La hiérarchie du noyau Android conduit à la fragmentation

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 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 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 correctifs 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 dans les noyaux des périphériques, il est difficile de simplement fusionner les correctifs LTS dans les noyaux des périphériques.

Inhibe 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 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 qui a déjà 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 des noyaux 4.14 ont été livrés au printemps 2019.

Ce long délai entre la version 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 du noyau générique

Le projet Generic Kernel Image (GKI) s'attaque à la fragmentation du noyau en unifiant le noyau central et en déplaçant la prise en charge du SoC et de la carte hors du noyau central vers des modules de fournisseur chargeables. GKI présente également une interface de module de noyau (KMI) stable pour les modules de fournisseur, de sorte que les modules et le noyau peuvent ê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, 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 qui sont prises en charge pour l'ACK associé. Il n'y a pas d'abandon de fonctionnalité pendant la durée de vie d'une version du noyau GKI.
  • Le noyau GKI expose une 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 s'est déroulé en plusieurs étapes à partir des noyaux v5.4 dans la version de la plate-forme 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 avec des noyaux 5.10 et est 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 les versions ultérieures de la plate-forme). Les objectifs de GKI 1.0 incluent les éléments 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 de maintenir leur noyau à jour avec les noyaux communs AOSP.
  • Incluez les principales modifications d'Android dans les noyaux pour la mise à niveau et le lancement des appareils avec les nouvelles versions d'Android.
  • Ne cassez 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 de noyau 5.10 ou supérieure 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. Étant donné que la stabilité binaire est maintenue pour la KMI, vous pouvez installer ces images de démarrage sans apporter de modifications aux images du fournisseur. Les objectifs de GKI 2.0 incluent les éléments suivants :

  • N'introduisez pas de régressions significatives des performances ou de la 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 correctifs de bogues sans implication du fournisseur.
  • Réduisez le coût de la mise à jour de la version principale 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 récent 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.