Les noyaux communs AOSP (également appelés noyaux communs Android ou ACK) sont en aval des noyaux kernel.org et incluent des correctifs d'intérêt pour la communauté Android qui n'ont pas été fusionnés dans les noyaux principaux ou à long terme (LTS). Ces correctifs peuvent inclure :
- Rétroportages et cherry-picks de fonctionnalités en amont nécessaires pour les fonctionnalités Android
- Fonctionnalités prêtes pour les appareils Android, mais toujours en cours de développement en amont
- Fonctionnalités des 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 branche principale de 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 du nouveau noyau commun Android à partir de android-mainline
. Ce nouveau modèle évite l'effort important de portage et de test des correctifs Android en obtenant le même résultat de manière incrémentielle. android-mainline
fait l'objet de tests continus importants. Ce modèle inclut un noyau de haute qualité dès sa publication.
Lorsqu'une nouvelle version LTS est déclarée en amont, le noyau commun correspondant est branché à partir de android-mainline
. Cela permet aux partenaires de commencer un projet avant la déclaration de la version LTS, en fusionnant à partir de android-mainline
. Une fois la nouvelle branche du noyau commun créée, les partenaires peuvent facilement modifier la source de fusion pour la nouvelle branche.
D'autres branches de noyau courantes reçoivent régulièrement des fusions 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é dans le noyau commun 6.1 (android14-6.1
). Nous encourageons vivement les partenaires à mettre à jour leurs noyaux pour bénéficier des correctifs LTS et spécifiques à Android.
Branche du noyau ACK KMI
Les noyaux GKI disposent d'une interface de module de noyau 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
. Le noyau GKI android15-6.6
a été introduit dans Android 15.
Noyaux de fonctionnalités et de lancement
Avant Android 15, n'importe lequel des trois derniers noyaux pouvait être utilisé pour le lancement de l'appareil. À partir d'Android 15, les deux versions de noyau les plus récentes peuvent être utilisées pour le lancement de l'appareil. Les kernels de lancement pour Android 15 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 de la version de la plate-forme, les noyaux qui ne disposent pas des dernières fonctionnalités pour une version de la plate-forme peuvent toujours être utilisés pour lancer des appareils. Par conséquent, les noyaux conçus pour Android 14, comme 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 de la plate-forme Android | Lancer des kernels | Noyaux de caractéristiques |
---|---|---|
Android 16 (2025) |
android16-6.12
android15-6.6
|
android16-6.12
|
Android 15 (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.10
|
android14-6.1
android14-5.15
|
Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
android13-5.15
android13-5.10
|
Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.4
|
android12-5.10
android12-5.4
|
1 Des restrictions supplémentaires peuvent s'appliquer si le BSP associé a été mis à jour pour la version de la plate-forme. Pour en savoir plus, consultez Objet d'interface du fournisseur : correspond aux branches du noyau. |
Hiérarchie de noyau commun
Créer une branche à partir d'android-mainline
Le niveau supérieur de la hiérarchie du noyau commun est illustré à la figure 1.
Figure 1 : Créer des noyaux communs à partir du noyau android-mainline
Notez qu'un nouveau noyau commun Android android14-6.1
a été créé à partir de android-mainline
en 2022. En 2023, lorsque la prochaine version LTS a été déclarée, android15-6.6
a été branché à partir de android-mainline
.
Comme le montre la figure 1, chaque version du noyau peut servir de base à deux noyaux GKI.
Par exemple, les deux noyaux 5.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. C'était également le cas pour la version 5.10 : android12-5.10
a été créé lorsque la version LTS a été déclarée, et android13-5.10
a été créé à partir de android12-5.10
lors de l'étape de finalisation des fonctionnalités du noyau au printemps 2021 pour permettre le développement de fonctionnalités pour Android 13. À partir d'Android 15 (2024), il n'y a qu'un seul nouveau noyau GKI par version de noyau (il n'y a pas de noyau android15-6.1
).
Cycle de vie de la branche ACK KMI
Le cycle de vie d'une branche ACK KMI est illustré à la figure 2.
Figure 2. 6.6 Cycle de vie de la branche ACK 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 pour la version 6.6.
Chaque branche ACK KMI passe par trois phases indiquées dans la figure 2 par différentes couleurs dans chaque branche. Comme indiqué, la branche LTS est régulièrement fusionnée, quelle que soit la phase.
Phase de développement
Une fois créée, une branche ACK KMI entre dans la phase de développement (indiquée par dev sur 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 le nouveau noyau LTS en amont.
Phase de stabilisation
Lorsque la branche ACK KMI est déclarée complète, elle entre dans la phase de stabilisation (indiquée comme stable sur la figure 2). Les fonctionnalités et les corrections de bugs des partenaires sont toujours acceptées, mais le suivi des IMC est activé pour détecter toute modification affectant l'interface. Au cours de cette phase, les modifications destructives du KMI sont acceptées et la définition du KMI est mise à jour à une fréquence prédéfinie (normalement toutes les deux semaines). Pour en savoir plus sur la surveillance des KMI, consultez la présentation de GKI.
Phase figée de l'IKM
Avant qu'une nouvelle version de la plate-forme ne soit envoyée à AOSP, la branche ACK KMI est gelée et le reste pendant toute sa durée de vie. Cela signifie qu'aucune modification cassant le KMI n'est acceptée, sauf si un problème de sécurité grave est identifié et ne peut pas ê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 la correction n'est pas requise pour les appareils Android.
Lorsqu'une branche ACK KMI est figé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é. La KMI peut être étendue avec de nouveaux symboles exportés tant que les interfaces qui composent la KMI actuelle ne sont pas affectées. Lorsque de nouvelles interfaces sont ajoutées au KMI, elles deviennent immédiatement stables et ne peuvent pas être interrompues par de futures modifications.
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);
Toutefois, vous pouvez ajouter une fonction :
struct foo2 {
struct foo orig_foo;
int new_field;
};
int do_foo2(struct foo2 &myarg)
{
do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);
La rétrocompatibilité avec l'espace utilisateur est maintenue pendant toute la durée de vie du noyau GKI, de sorte que le noyau peut être utilisé en toute sécurité pour la version de la plate-forme Android avec laquelle l'appareil a été lancé. Les tests continus avec les versions précédentes permettent de maintenir la compatibilité. Ainsi, dans la figure 2, le noyau android15-6.6
peut être utilisé pour les appareils Android 15 et versions ultérieures. Étant donné que 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, que ce soit pour le lancement ou la mise à niveau.
Numéro de génération du KMI
Si une fusion LTS a lieu pendant la phase de stabilisation, ou si un problème de sécurité ou un autre événement se produit après cette phase et nécessite l'acceptation d'un correctif modifiant le KMI, le numéro de génération du 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 nombre qui suit la version de la plate-forme correspond à la génération KMI (6
dans le cas présent).
Si la génération KMI change, le noyau n'est pas compatible avec les modules du fournisseur conformes à la génération KMI précédente. Les modules doivent donc être reconstruits et mis à jour de manière synchrone avec le noyau. Après le gel des KMI, les modifications apportées à leur génération devraient être très rares.
Compatibilité entre les noyaux
Les exigences de compatibilité entre les noyaux d'une même famille LTS changent avec les nouveaux noyaux GKI.
Noyaux GKI
Les noyaux GKI sont rétrocompatibles avec toutes les versions de la plate-forme Android qui étaient compatibles avec la version du noyau. De plus, les versions de la plate-forme Android sont rétrocompatibles avec les noyaux GKI des versions précédentes. Vous pouvez donc utiliser en toute sécurité le noyau android14-6.1
développé pour Android 14 (2023) sur les appareils équipés d'Android 15 (2024). La compatibilité est vérifiée par des tests VTS et CTS continus des noyaux GKI avec toutes les versions compatibles.
Le KMI est stable, ce qui permet de mettre à jour le noyau sans avoir à reconstruire les modules du noyau dans l'image du fournisseur.
La compatibilité KMI n'est pas maintenue entre les différents noyaux GKI. Par exemple, un noyau android14-6.1
ne peut pas être remplacé par un noyau android15-6.6
sans reconstruire tous les modules.
Les noyaux GKI ne sont compatibles qu'avec leur version initiale et les versions ultérieures.
Elles ne sont pas compatibles avec les anciennes versions. Par conséquent, un noyau android15-6.6
n'est pas compatible avec les appareils exécutant Android 14 (2023).
Matrice de compatibilité
Ce tableau indique les versions du noyau compatibles et testées avec chaque version de la plate-forme Android.
Version de la plate-forme Android | Noyaux compatibles |
---|---|
Android 16 (2025) |
android16-6.12
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 15 (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 14 (2023) |
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
Android 13 (2022) |
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
|
Durée de l'assistance et 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 les bulletins de sécurité Android mensuels qui sont pertinents pour ACK.
Les ACK peuvent être compatibles plus longtemps que le noyau stable en amont correspondant sur kernel.org. Dans ce cas, Google fournit une assistance étendue jusqu'à la date de fin de vie indiquée dans cette section. Lorsque les noyaux arrivent en fin de vie, ils ne sont plus pris en charge par Google et les appareils qui les exécutent sont considérés comme vulnérables.
À partir du noyau 6.6, la durée de vie de la compatibilité pour les noyaux stables est de quatre ans.
Ce tableau indique les durées de vie des ACK compatibles :
Branche ACK | Date de lancement |
Durée de vie de l'assistance (années) |
EOL |
---|---|---|---|
android11-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
android16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
Tests de noyau courants
Les noyaux communs sont testés avec plusieurs systèmes d'intégration continue en plus des tests en aval effectués par les fournisseurs.
Test fonctionnel du noyau Linux
Les tests Linux Kernel Functional Test (LKFT) lancent différentes 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 la page android-lkft.
Tests KernelCI
Les tests de compilation et de démarrage KernelCI sont lancés chaque fois qu'un nouveau correctif est validé dans une branche de noyau commune. Plusieurs centaines de configurations de compilation sont testées et démarrées sur différentes cartes. Vous trouverez les résultats récents pour les noyaux Android sur le site KernelCL.
Tests de pré-envoi et de post-envoi Android
Les tests de pré-soumission permettent d'éviter l'introduction de défaillances dans les noyaux communs Android. Le récapitulatif des résultats du test est disponible dans l'onglet "Checks" (Vérifications) de la modification du code dans le gerrit du noyau commun Android.
Les tests post-envoi Android sont effectués sur les nouvelles versions publiées dans les branches du noyau commun Android lorsque de nouveaux correctifs sont ajoutés à une branche du noyau commun Android sur ci.android.com. En saisissant aosp_kernel
comme nom de branche partiel sur ci.android.com, vous verrez une liste des branches du noyau avec les résultats disponibles. Par exemple, les résultats pour android-mainline
sont disponibles sur le tableau de bord d'intégration continue d'Android (Android CI). Cliquez sur une compilation spécifique pour trouver l'état des tests dans l'onglet Test Results
.
Les tests définis par test-mapping avec le groupe de tests kernel-presubmit
dans l'arborescence source de la plate-forme Android sont exécutés en tant que tests avant envoi pour les branches du noyau Android. Par exemple, la configuration suivante dans test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING permet d'activer vts_kernel_proc_file_api_test
en tant que test de pré-soumission lors de l'enregistrement du code du noyau commun Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
Test 0-day
Les tests 0 day effectuent des tests correctif par correctif sur toutes les branches du noyau commun Android lorsque de nouveaux correctifs sont validés. Divers tests de démarrage, fonctionnels 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 | 16 | 15 | 14 | 13 | 12 | LKFT | KernelCI | Avant l'envoi | Après l'envoi | 0-day | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android16-6.12
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Contribuer aux kernels communs Android
En règle générale, le développement de fonctionnalités doit être effectué sur le noyau Linux principal et non sur les noyaux communs Android. Le développement en amont est fortement encouragé. Une fois le développement accepté, il peut être rétroporté vers la branche ACK spécifique si nécessaire. L'équipe du noyau Android est heureuse de soutenir les efforts d'upstreaming au profit de l'écosystème Android.
Envoyez des correctifs à Gerrit et respectez ces consignes de contribution.