Noyaux Android courants

Les noyaux courants AOSP (également appelés noyaux Android courants ou ACK) se trouvent en aval des noyaux kernel.org et incluent des correctifs présentant un intérêt pour la communauté Android, qui n'ont pas été fusionnés avec les noyaux principaux ou LTS. Ces correctifs peuvent inclure:

  • Rétroportages et sélections de fonctionnalités en amont nécessaires pour les fonctionnalités Android
  • Fonctionnalités prêtes pour les appareils Android, mais encore en développement en amont
  • Fonctionnalités fournisseurs/OEM utiles pour les autres partenaires de l'écosystème

android-mainline est la branche de développement principale pour les fonctionnalités Android. La ligne principale Linux est fusionnée dans android-mainline chaque fois que Linus Torvalds publie une version ou une version candidate. Avant 2019, les noyaux communs Android étaient construits en clonant le noyau LTS récemment déclaré et en ajoutant les correctifs spécifiques à Android. Ce processus a été modifié en 2019 pour créer une branche au nouveau noyau commun Android à partir de android-mainline. Ce nouveau modèle évite les efforts importants de transfert de port et de test des correctifs Android en produisant le même résultat de manière incrémentielle. android-mainline subit des tests continus importants. Ce modèle garantit un noyau de haute qualité dès sa publication.

Lorsqu'un nouveau LTS est déclaré en amont, le noyau commun correspondant est ramifié depuis android-mainline. Cela permet aux partenaires de démarrer un projet avant la déclaration de la version LTS, en fusionnant à partir de android-mainline. Une fois la nouvelle branche de noyau commune créée, les partenaires peuvent facilement remplacer la source de fusion par la nouvelle branche.

Les autres branches de noyau courantes reçoivent des fusions régulières de leur noyau LTS associé. Ces fusions sont normalement effectuées immédiatement après la publication de la version LTS. Par exemple, lorsque Linux 6.1.75 a été publié, il a été fusionné avec le noyau commun 6.1 (android14-6.1). Les partenaires sont vivement encouragés à mettre à jour leurs noyaux pour rester à jour avec les corrections de bugs LTS et spécifiques à Android.

Branche du noyau ACK KMI

Les noyaux GKI ont une interface de module kernel stable. Le KMI est identifié de manière unique par la version du noyau et la version de la plate-forme Android. Les branches sont donc nommées ANDROID_RELEASE-KERNEL_VERSION. Par exemple, le noyau GKI 6.1 pour Android 14 est nommé android14-6.1. Pour Android 15 (expérimental AOSP), le noyau GKI android15-6.6 a été introduit.

Fonctionnalités et lancements de noyaux

Avant Android 15 (expérimental AOSP), l'un des trois noyaux les plus récents pouvait être utilisé pour le lancement de l'appareil. À partir d'Android 15 (version expérimentale AOSP), les deux versions de noyau les plus récentes peuvent être utilisées pour le lancement des appareils. Les noyaux de lancement pour Android 15 (expérimental AOSP) sont android15-6.6 et android14-6.1.

Étant donné que les mises à niveau du noyau ne sont pas requises lors de la mise à jour d'une version de plate-forme, les noyaux qui ne disposent pas des dernières fonctionnalités d'une version de plate-forme peuvent toujours être utilisés pour lancer des appareils. Par conséquent, les noyaux conçus pour Android 14, tels que android14-6.1, peuvent être utilisés sur les appareils même après la mise à niveau de la version de la plate-forme vers Android 15 (version expérimentale AOSP).

Version de la plate-forme Android Lancer les noyaux Noyaux de fonctionnalités
Android 15 (version expérimentale AOSP) (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 Des restrictions supplémentaires peuvent s'appliquer si la page "BSP" associée a été mise à jour pour la version de la plate-forme. En termes plus généraux, le numéro de version Android du noyau doit être supérieur ou égal à la version FCM cible. Pour en savoir plus, consultez la section Objet d'interface fournisseur – Faire correspondre les branches du noyau.

Hiérarchie de noyau commune

Branche d'android-mainline

Le niveau supérieur de la hiérarchie de noyau commune est illustré dans la figure 1.

Créer des noyaux courants à partir du noyau android-mainline

Figure 1 : Créer des noyaux courants à partir du noyau android-mainline

Notez qu'un nouveau noyau commun Android android14-6.1 a été ramifié depuis android-mainline en 2022. En 2023, lors de la déclaration de la prochaine version LTS, android15-6.6 a été ramifié à partir de android-mainline.

Comme le montre la figure 1, chaque version de noyau peut servir de base à deux noyaux GKI. Par exemple, les deux noyaux v5.15 sont android13-5.15 et android14-5.15, qui sont tous deux des noyaux de fonctionnalités pour leurs versions de plate-forme respectives. Cela a également été le cas pour la version 5.10. android12-5.10 a été créé lors de la déclaration du LTS et android13-5.10 a été scindé à partir de android12-5.10 au printemps 2021, lorsque la fonctionnalité du noyau a été achevée pour permettre le développement de fonctionnalités pour Android 13. À partir d'Android 15 (version expérimentale AOSP) (2024), il n'existe qu'un seul nouveau noyau GKI par version de noyau (il n'y a pas de noyau android15-6.1).

Confirmer le cycle de vie des branches KMI

Le cycle de vie d'une branche ACK KMI est illustré ci-dessous dans la figure 2.

6.6 Confirmer le cycle de vie des branches KMI

Figure 2. 6.6 Confirmer le cycle de vie des branches KMI

Pour clarifier le processus de développement et le cycle de vie des branches, la figure 2 se concentre sur les branches ACK KMI de la version 6.6.

Chaque branche ACK KMI passe par trois phases, indiquées dans la figure 2 par des couleurs différentes dans chaque branche. Comme indiqué, le LTS est régulièrement fusionné, quelle que soit la phase.

Phase de développement

Une fois créée, une branche ACK KMI entre dans la phase de développement (identifiée comme dev dans la figure 2) et est ouverte aux contributions de fonctionnalités pour la prochaine version de la plate-forme Android. Dans la figure 2, android15-6.6 a été créé lorsque la version 6.6 a été déclarée comme nouveau noyau LTS en amont.

Phase de stabilisation

Lorsque la branche ACK KMI est déclarée comme terminée, elle entre dans la phase de stabilisation (identifiée comme stable dans la figure 2). Les fonctionnalités partenaires et les corrections de bugs sont toujours acceptées, mais le suivi KMI est activé pour détecter les modifications qui affectent l'interface. Au cours de cette phase, les modifications destructives de KMI sont acceptées et la définition du KMI est mise à jour à une fréquence prédéfinie (généralement toutes les deux semaines). Consultez la présentation de GKI pour en savoir plus sur la surveillance KMI.

KMI phase figée

Avant le transfert d'une nouvelle version de plate-forme vers AOSP, la branche ACK KMI est gelée et reste figée pendant toute la durée de vie de la branche. Cela signifie qu'aucune modification destructive pour le KMI n'est acceptée, sauf si un problème de sécurité grave est identifié et ne peut être atténué sans affecter le KMI stable. Pour éviter les problèmes de KMI, certains correctifs fusionnés à partir de LTS peuvent être modifiés ou supprimés si le correctif n'est pas requis pour les appareils Android.

Lorsqu'une branche ACK KMI est bloquée, les corrections de bugs et les fonctionnalités partenaires peuvent être acceptées tant que le noyau commun KMI existant n'est pas défaillant. Le KMI peut être étendu avec de nouveaux symboles exportés, à condition que les interfaces comprenant le KMI actuel ne soient pas affectées. Lorsque de nouvelles interfaces sont ajoutées au KMI, elles deviennent immédiatement stables et ne peuvent pas être interrompues par des modifications futures.

Par exemple, une modification qui ajoute un champ à une structure utilisée par un noyau commun d'interface KMI n'est pas autorisée, car elle modifie la définition de l'interface:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Cependant, l'ajout d'une nouvelle fonction suffit:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

Pendant la durée de vie du noyau GKI, la rétrocompatibilité avec l'espace utilisateur est maintenue afin que le noyau puisse être utilisé en toute sécurité pour la version de la plate-forme Android avec laquelle l'appareil a été lancé. Des tests continus avec les versions précédentes assurent le maintien de la compatibilité. Ainsi, dans la figure 2, le noyau android15-6.6 peut être utilisé pour les appareils Android 15 (expérimental AOSP) et les appareils ultérieurs. Comme la version de la plate-forme Android est également compatible avec les versions précédentes, le noyau android14-6.1 peut être utilisé pour les appareils Android 15 (expérimental AOSP) à des fins de lancement ou de mise à niveau.

Numéro de génération de KMI

Si une fusion LTS se produit pendant la phase de stabilisation, ou si un problème de sécurité ou un autre événement nécessite l'acceptation d'un correctif modifiant le KMI, le numéro de génération KMI enregistré dans build.config.common est incrémenté. La génération actuelle de KMI peut être trouvée à l'aide de la commande uname:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

Le numéro qui suit le lancement de la plate-forme correspond à la génération du KMI (6 dans ce cas).

Si la génération de KMI change, le noyau n'est pas compatible avec les modules du fournisseur conformes à la génération précédente de KMI. Les modules doivent donc être recréés et mis à jour de manière synchrone avec le noyau. Après le gel des KMI, les changements de génération de KMI devraient être très rares.

Compatibilité entre les noyaux

Les exigences de compatibilité entre les noyaux d'une même famille LTS changent à partir des nouveaux noyaux GKI.

Noyaux GKI

Les noyaux GKI maintiennent la rétrocompatibilité avec toutes les versions de la plate-forme Android compatibles avec la version de noyau. En outre, les versions de la plate-forme Android sont rétrocompatibles avec les noyaux GKI des versions précédentes. Vous pouvez ainsi utiliser en toute sécurité le noyau android14-6.1 développé pour Android 14 (2023) sur les appareils exécutant Android 15 (AOSP expérimental) (2024). La compatibilité est vérifiée via des tests VTS et CTS continus des noyaux GKI avec toutes les versions compatibles.

Le KMI est stable de sorte que le noyau peut être mis à jour sans nécessiter de recompilation des modules du noyau dans l'image du fournisseur.

La compatibilité KMI n’est pas maintenue entre les différents noyaux GKI. Ainsi, un noyau android14-6.1 ne peut pas être remplacé par un noyau android15-6.6 sans recompiler tous les modules.

Les noyaux GKI ne sont compatibles qu'avec leur version initiale et les versions suivantes. Elles ne sont pas compatibles avec les versions plus anciennes. Ainsi, un noyau android15-6.6 n'est pas compatible avec les appareils exécutant Android 14 (2023).

Matrice de compatibilité

Ce tableau présente les versions de noyau compatibles et testées avec chaque version de la plate-forme Android.

Version de la plate-forme Android Noyaux compatibles pour la mise à niveau Noyaux compatibles pour le lancement
Android 15 (version expérimentale AOSP) (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

Prise en charge des durées de vie et des correctifs de sécurité

Les noyaux Android courants sont pris en charge jusqu'à ce que le noyau LTS ou la version de la plate-forme Android ne soient plus pris en charge. Lorsqu'un noyau est compatible, il continue de recevoir des fusions LTS en amont et des corrections de bugs pour le code spécifique à Android. Ces correctifs incluent tous les correctifs de sécurité du noyau cités dans les bulletins de sécurité Android mensuels qui sont pertinents pour les noyaux Android courants.

Les partenaires peuvent être sûrs qu'en utilisant les noyaux GKI, ils obtiennent tous les correctifs de sécurité du noyau.

Tests de noyau courants

Les noyaux communs sont testés avec plusieurs systèmes CI en plus des tests en aval effectués par les fournisseurs.

Test fonctionnel du noyau Linux

Les tests LKFT (Linux Kernel Functional Test) lancent diverses suites de tests, y compris kselftest, LTP, VTS et CTS sur un ensemble d'appareils physiques arm32 et arm64. Les résultats des tests récents sont disponibles sur cette page.

Tests KernelCI

Les tests de compilation et de démarrage KernelCI sont lancés chaque fois qu'un nouveau correctif est validé sur une branche de noyau commune. Plusieurs centaines de configurations de compilation sont testées et démarrées sur différentes cartes. Pour consulter les résultats récents pour les noyaux Android, cliquez ici.

Tests avant et après envoi Android

Les tests avant envoi permettent d'empêcher l'introduction d'échecs dans les noyaux courants Android. Le résumé des résultats du test se trouve dans l'onglet "Vérifications" du changement de code dans Gerrit de noyau Android.

Les tests post-envoi Android sont effectués sur les nouvelles versions publiées dans les branches courantes du noyau Android lorsque de nouveaux correctifs sont validés dans une branche de noyau commune Android dans ci.android.com. En saisissant aosp_kernel comme nom de branche partiel dans ci.android.com, vous verrez une liste des branches du noyau avec des résultats disponibles. Par exemple, les résultats pour android-mainline sont disponibles ici. Lorsque vous cliquez sur un build particulier, l'état du test s'affiche dans l'onglet Test Results.

Les tests définis par test-mapping avec le groupe de test kernel-presubmit dans l'arborescence source de la plate-forme Android seront exécutés en tant que préenvoi pour les branches du noyau Android. Par exemple, la configuration suivante dans test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING activera vts_kernel_proc_file_api_test en tant que test presbumit lors de l'enregistrement commun du code du noyau Android.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

Tests 0 jour

Les tests 0-day effectuent des tests correctif par correctif sur toutes les branches courantes du noyau Android lorsque de nouveaux correctifs sont appliqués. Différents tests de démarrage, de fonctionnement et de performances sont exécutés. Rejoignez le groupe public cros-kernel-buildreports.

Matrice de test

Noyau commun Android Versions de la plate-forme Android Suites de tests
Principal 15 14 13 12 11 10 LKFT KernelCI Pré-envoi Publier l'envoi 0 jour
android-mainline
android5-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

Contribuer aux noyaux Android courants

En règle générale, le développement de fonctionnalités doit être effectué sur Linux principal et non sur les noyaux Android courants. Le développement en amont est vivement encouragé. Une fois le développement accepté, il peut être facilement rétroporté vers la branche ACK spécifique si nécessaire. L'équipe du noyau Android est heureuse de soutenir les efforts de mise en streaming au profit de l'écosystème Android.

Envoyez des correctifs à Gerrit et respectez ces consignes relatives aux contributions.