Un noyau de produit , également appelé noyau de périphérique ou noyau OEM , est le noyau que vous fournissez sur votre périphérique. 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) :
Figure 1. Construction du noyau du produit pré-GKI.
- Le noyau Linux Long Term Supported (LTS) de kernel.org a été modifié avec des correctifs spécifiques à Android, ce qui a donné un noyau commun Android (ACK) .
- 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é le noyau du fournisseur .
- Enfin, le noyau du fournisseur a été modifié par les OEM avec des pilotes de périphériques supplémentaires et des personnalisations qu'ils jugent nécessaires. Le noyau résultant est appelé le noyau du produit .
Toutes ces modifications peuvent faire en sorte que jusqu'à 50 % du code du noyau soit du code hors arborescence et non des noyaux Linux en amont ou des ACK. Avant GKI, presque tous les appareils avaient un noyau personnalisé 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 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
etandroid12-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 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. É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.
,Un noyau de produit , également appelé noyau de périphérique ou noyau OEM , est le noyau que vous fournissez sur votre périphérique. 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) :
Figure 1. Construction du noyau du produit pré-GKI.
- Le noyau Linux Long Term Supported (LTS) de kernel.org a été modifié avec des correctifs spécifiques à Android, ce qui a donné un noyau commun Android (ACK) .
- 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é le noyau du fournisseur .
- Enfin, le noyau du fournisseur a été modifié par les OEM avec des pilotes de périphériques supplémentaires et des personnalisations qu'ils jugent nécessaires. Le noyau résultant est appelé le noyau du produit .
Toutes ces modifications peuvent faire en sorte que jusqu'à 50 % du code du noyau soit du code hors arborescence et non des noyaux Linux en amont ou des ACK. Avant GKI, presque tous les appareils avaient un noyau personnalisé 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 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
etandroid12-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 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. É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.