Noyaux Android courants

Noyaux courants AOSP (également appelés noyaux Android courants ou ACK) sont en aval les noyaux kernel.org et inclure des correctifs ; présentant un intérêt pour la communauté Android, mais qui n'ont pas été fusionnées avec l'application mainline ou noyaux LTS (Long Term Support) compatibles. Ces correctifs peuvent inclure:

  • Rétroportages et sélections de fonctionnalités en amont nécessaires pour Android fonctionnalités
  • 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. Linux la ligne principale est fusionnée dans android-mainline chaque fois que Linus Torvalds publie une ou la version candidate. Avant 2019, les noyaux courants d'Android étaient créé en clonant le noyau LTS récemment déclaré et en ajoutant le Correctifs spécifiques à Android Ce processus a été modifié en 2019 pour décomposer la nouvelle application Android noyau commun de android-mainline. Ce nouveau modèle évite d'avoir à gérer de transfert des ports et de test des correctifs Android en obtenant le même résultat progressivement. android-mainline fait l'objet de tests continus importants, ce qui garantit un noyau de haute qualité dès qu’il est publié.

Lorsqu'un nouveau LTS est déclaré en amont, le noyau commun correspondant est ramifié de android-mainline. Cela permet aux partenaires de commencer un projet avant le déclaration de la version LTS, en fusionnant à partir de android-mainline. Après le nouvelle branche de noyau commune est créée, les partenaires peuvent facilement modifier la fusion source vers la nouvelle branche.

Les autres branches courantes du noyau reçoivent régulièrement des fusions à partir de leurs Noyau LTS. Ces fusions sont normalement effectuées immédiatement après la publication de la version LTS. Pour exemple, lorsque Linux 6.1.75 a été publié, il a été fusionné avec la version 6.1 commune noyau (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 unique identifiés par la version du noyau et la version de la plate-forme Android, de sorte que les branches sont nommées ANDROID_RELEASE à KERNEL_VERSION Par exemple, le 6.1 GKI Le noyau pour Android 14 s'appelle android14-6.1. Pour Android 15 (expérimental AOSP), le noyau GKI android15-6.6 était présenté.

Fonctionnalités et lancements de noyaux

Avant Android 15 (expérimental AOSP), l'un des trois noyaux les plus récents pourrait être utilisée pour le lancement de l'appareil. En commençant par Android 15 (expérimental AOSP), les deux versions de noyau les plus récentes pour le lancement des appareils. Les noyaux de lancement de Android 15 (version expérimentale AOSP) est android15-6.6 et android14-6.1.

Comme les mises à niveau du noyau ne sont pas requises lors de la mise à jour de la plate-forme, les noyaux qui ne disposent pas des dernières fonctionnalités d'une version de plate-forme peuvent encore être utilisé pour lancer des appareils. Par conséquent, les noyaux conçus pour Android 14, comme android14-6.1, peut être utilisé sur 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 le fournisseur de services de facturation associé a pour la version de la plate-forme. En termes plus généraux, Numéro de version d'Android du noyau doit être supérieur ou égal au version FCM cible. Voir Objet d'interface fournisseur : mise en correspondance des branches du noyau pour en savoir plus.

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, lorsque la prochaine version LTS a été déclarée, android15-6.6 a été ramifié depuis 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 plateforme respectives. Ce c'était aussi le cas pour 5.10 ; android12-5.10 a été créé en même temps que le LTS Déclarée et android13-5.10 a fait l'objet d'une ramification à partir de android12-5.10 au niveau du noyau fonctionnalité complète au printemps 2021 pour permettre le développement de fonctionnalités pour Android 13. À partir d'Android 15 (version expérimentale AOSP) (2024), il n'existe un 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 le ACK KMI branches pour 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é, la version LTS est régulièrement fusionnée, de la phase.

Phase de développement

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

Phase de stabilisation

Lorsque la branche ACK KMI est déclarée comme terminée, elle entre dans le phase de stabilisation (indiquée en tant que stable dans la figure 2). les fonctionnalités et les corrections de bugs sont toujours acceptées, mais le suivi KMI est activé pour détecter toute modification qui affectent l'interface. Dans cette phase, les modifications destructives KMI sont acceptées et la définition du KMI est mise à jour à un rythme prédéfini (normalement, semaines). Consultez le Présentation de GKI pour sur la surveillance des 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 Les modifications destructives KMI sont acceptées, sauf si un problème de sécurité grave est identifié. qui ne peut être atténué sans affecter le KMI stable. Pour éviter le KMI certains correctifs fusionnés à partir de LTS peuvent être modifiés ou supprimés si le correctif n'est pas nécessaire 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 cassé. Le KMI peut être étendu avec de nouveaux symboles exportés, à condition que les interfaces comprenant le KMI actuel ne sont pas affectées. Lorsque de nouvelles interfaces sont ajoutées au KMI, elles deviennent stables et ne peuvent pas être interrompues par des modifications futures.

Par exemple, une modification qui ajoute un champ à une structure utilisée par une interface KMI. le noyau commun n’est pas autorisé, car cela 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 maintenus pour que le noyau puisse être utilisé en toute sécurité pour la plate-forme Android version avec laquelle l'appareil a été lancé. Tests continus avec les versions précédentes assure le maintien de la compatibilité. Ainsi, sur la figure 2, la propriété android15-6.6 Le noyau peut être utilisé pour les appareils Android 15 (expérimental AOSP) et versions ultérieures. appareils. 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 (AOSP expérimentale) en vue d'un lancement ou d'une mise à niveau.

Numéro de génération de KMI

En cas de fusion LTS pendant la phase de stabilisation, de problème de sécurité ou un autre événement après celui-ci qui nécessite l'acceptation d'un correctif modifiant le KMI, le Le numéro de génération KMI enregistré dans build.config.common est incrémenté. La la génération actuelle des 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 recompilés et mis à jour de manière synchrone avec le noyau. Une fois le KMI bloqué, la génération de KMI change devraient être très rares.

Compatibilité entre les noyaux

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

Noyaux GKI

Les noyaux GKI maintiennent la rétrocompatibilité avec toutes les plates-formes Android. versions qui prenaient en charge la version du noyau. De plus, la plate-forme Android sont rétrocompatibles avec les noyaux GKI des versions précédentes. Donc vous pouvez utiliser en toute sécurité le noyau android14-6.1 développé pour Android 14 (2023) sur les appareils exécutant Android 15 (version expérimentale AOSP) (2024). La compatibilité est vérifiée via des tests VTS et CTS continus des noyaux GKI avec toutes les versions prises en charge.

Le KMI est stable, ce qui permet de mettre à jour le noyau 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. Donc, Par exemple, 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, une Le noyau android15-6.6 n'est pas compatible avec les appareils en cours d'exécution. Android 14 (2023)

Matrice de compatibilité

Ce tableau présente les versions de noyau prises en charge et testées avec chaque de la plate-forme.

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 ACK reçoivent 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 le document Android Bulletins de sécurité pertinents pour ACK.

Les ACK peuvent être pris en charge plus longtemps que le noyau stable en amont correspondant sur kernel.org. Dans ce cas, Google offre une prise en charge étendue jusqu'à la date de fin de vie indiquée dans ce . Lorsque les noyaux sont en fin de vie, ils ne sont plus pris en charge par Google et les appareils qui les utilisent sont considérés comme vulnérables.

À partir du noyau 6.6, la durée de vie de la prise en charge des noyaux stables est 4 ans.

Ce tableau présente la durée de vie des ACK pris en charge:

Branche ACK Date
de lancement
Durée de vie
de l'assistance
(années)
fin de vie
android-4.19-stable 2018-10-22 6 2025-01-01
Android 11-5.4 2019-11-24 6 2026-01-01
Android 12-5.4 2019-11-24 6 2026-01-01
Android 12-5.10 2020-12-13 6 2027-07-01
Android 13-5.10 2020-12-13 6 2027-07-01
Android 13-5.15 2021-10-31 6 2028-07-01
Android14-5.15 2021-10-31 6 2028-07-01
Android 14-6.1 2022-12-11 6 2029-07-01
Android 15-6.6 2023-10-29 4 2028-07-01

Tests de noyau courants

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

Test fonctionnel du noyau Linux

Linux Kernel Functional Test (LKFT) lancent différentes suites de tests, y compris kselftest, LTP, VTS et CTS sur une d'appareils physiques arm32 et arm64. Les résultats des tests récents sont disponibles cliquez ici.

Tests KernelCI

Les tests de compilation et de démarrage KernelCI sont chaque fois qu'un nouveau correctif est validé sur une branche commune du noyau. Plusieurs 100 configurations de compilation sont testées et démarrées sur différentes cartes. Récents pour les noyaux Android se trouve cliquez ici.

Tests avant et après envoi Android

Les tests avant envoi permettent d'éviter l'introduction d'échecs dans les Noyaux Android courants Le résumé des résultats du test est disponible dans "Vérifications". du changement de code dans Gerrit du noyau Android.

Le test post-envoi Android est effectué sur les nouvelles versions publiées dans les branches du noyau courantes d'Android lorsque de nouveaux correctifs sont appliqués sur une branche de noyau commune Android dans ci.android.com ; En saisissant aosp_kernel en tant que nom de branche partiel dans ci.android.com, vous voyez une liste des branches du noyau avec disponibles. Par exemple, il est possible de trouver les résultats pour android-mainline cliquez 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

Le test 0-day effectue des tests patch par correctif. sur toutes les branches courantes du noyau Android lorsque de nouveaux correctifs sont publiés. Divers de démarrage, de fonctionnement et de performance. Rejoindre le groupe public cros-kernel-buildreports

Matrice de test

Noyau commun Android Versions de la plate-forme Android Suites de tests
Main 15 14 13 12 11 10 LKFT KernelCI Pré-envoi Publier l'envoi 0 jour
android-mainline
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

Contribuer aux noyaux Android courants

En règle générale, le développement de fonctionnalités doit être effectué sur Linux principal Noyaux Android courants Le développement en amont est vivement conseillé, est accepté, il peut être facilement rétroporté sur l'ACK spécifique. ou une autre branche selon les besoins. L'équipe du noyau Android est de soutenir les efforts d'amélioration de la diffusion au profit de l'écosystème Android.

Envoyer des correctifs à Gerrit et conforme à ces consignes relatives aux contributions.