À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Maintenir une interface de module de noyau stable
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Il est essentiel de maintenir une interface de module de noyau (KMI) stable pour les modules du fournisseur. Le noyau GKI est compilé et distribué au format binaire, et les modules pouvant être chargés par le fournisseur sont compilés dans une arborescence distincte. Le kernel GKI et les modules du fournisseur qui en résultent doivent fonctionner comme s'ils avaient été créés ensemble.
En général, la communauté Linux a défavorisé la notion de stabilité de l'ABI dans le noyau pour le noyau principal. Face aux différentes chaînes d'outils, configurations et noyaux principaux Linux en constante évolution, il n'est pas possible de maintenir un KMI stable dans le noyau principal. Toutefois, il est possible de maintenir un KMI stable dans l'environnement GKI hautement contraint avec les contraintes suivantes:
Une seule configuration, gki_defconfig
, peut être utilisée pour compiler le noyau.
Le KMI n'est stable que dans la même version LTS et Android d'un noyau, comme android14-6.1
, android15-6.6
ou android16-6.12
.
- Aucune stabilité KMI n'est maintenue pour
android-mainline
.
Seule la chaîne d'outils Clang spécifique fournie dans AOSP et définie pour la branche correspondante est utilisée pour compiler le noyau et les modules.
Seuls les symboles connus pour être utilisés par les modules, comme indiqué dans une liste de symboles, sont surveillés pour leur stabilité et considérés comme des symboles KMI.
- Par conséquent, les modules du fournisseur ne doivent utiliser que des symboles KMI. Cette contrainte est appliquée par des chargements de modules défaillants si des symboles autres que des symboles KMI sont requis.
Une fois la branche KMI congelée, les modifications sont autorisées, mais ne peuvent pas endommager le KMI.
Voici quelques-unes de ces modifications:
- Modifications de configuration
- Modifications apportées au code du noyau
- Modifications apportées à la chaîne d'outils (y compris les mises à jour)
Utiliser le processus de compilation hermétique et la chaîne d'outils LLVM
Le processus de compilation hermétique garantit une KMI stable en faisant en sorte que les fichiers manifestes repo
dans kernel/manifest
décrivent complètement l'environnement de compilation. Par exemple, le fichier manifeste pour android16-6.12
inclut la chaîne d'outils, le système de compilation et tout le reste nécessaire pour créer le kernel GKI (Generic Kernel Image). La configuration de compilation, principalement BUILD.bazel
, garantit que les outils inclus sont utilisés correctement pour générer des résultats de compilation cohérents.
L'utilisation d'un processus de compilation hermétique garantit également que la description de l'ABI de l'arborescence est cohérente, qu'elle soit générée par Google (par exemple, gki/aarch64/abi.stg
pour android16-6.12
) ou générée dans une arborescence locale qui inclut les modules du fournisseur. Les outils permettant de créer et de comparer la description de l'ABI pour l'interface de module de kernel (KMI) sont également fournis dans le dépôt décrit par le fichier manifeste.
La chaîne d'outils utilisée pour compiler le kernel GKI doit être entièrement compatible avec la chaîne d'outils utilisée pour compiler les modules du fournisseur. À partir d'Android 10, tous les noyaux Android doivent être compilés avec une chaîne d'outils LLVM. Avec GKI, la chaîne d'outils LLVM utilisée pour créer les noyaux de produits et les modules du fournisseur doit générer la même ABI que la chaîne d'outils LLVM d'AOSP, et les partenaires doivent s'assurer que le KMI est compatible avec le noyau GKI.
Nous vous recommandons vivement d'utiliser les outils de compilation fournis, car ils offrent la meilleure compatibilité.
Et maintenant ?
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Maintain a stable kernel module interface\n\nIt's critical to maintain a stable kernel module interface (KMI) for vendor\nmodules. The GKI kernel is\nbuilt and shipped in binary form and vendor-loadable modules are built in a\nseparate tree. The resulting GKI kernel and vendor modules must work as\nthough they were built together.\n\nGenerally, the Linux community has\n[frowned on the notion of in-kernel ABI\nstability](https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rst)\nfor the mainline kernel. In the face of different toolchains, configurations,\nand an ever-evolving Linux mainline kernel, it isn't feasible to maintain a\nstable KMI in mainline. However, it's possible to maintain a stable KMI in\nthe highly-constrained GKI environment with these constraints:\n\n- Only a single configuration, `gki_defconfig`, can be used to build the\n kernel.\n\n- The KMI is only stable within the same LTS and Android version of a kernel,\n such as `android14-6.1`, `android15-6.6` or `android16-6.12`.\n\n - No KMI stability is maintained for `android-mainline`.\n- Only the specific *Clang* toolchain supplied in AOSP and defined for the\n corresponding branch is used for building kernel and modules.\n\n- Only symbols known to be used by modules as specified in a symbol list are\n monitored for stability and considered KMI symbols.\n\n - The corollary is that vendor modules must use only KMI symbols. This constraint is enforced by failing module loads if non-KMI-symbols are required.\n- After the KMI branch is frozen, changes are allowed but can't break the KMI.\n These changes include the following:\n\n - Config changes\n - Kernel code changes\n - Toolchain changes (including updates)\n\nUse the hermetic build process and LLVM toolchain\n-------------------------------------------------\n\nThe hermetic build process ensures a stable KMI by having `repo` manifests in\n`kernel/manifest` completely describe the build environment. For example, the\n[manifest for `android16-6.12`](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android16-6.12/default.xml)\nincludes the toolchain, build system, and everything else required to build the\nGeneric Kernel Image (GKI) kernel. The build configuration, primarily\n[`BUILD.bazel`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/BUILD.bazel),\nensures that the included tools are used correctly to generate consistent build\nresults.\n\nUsing a hermetic build process also ensures that the ABI description for the\ntree is consistent whether generated by Google (for example,\n[`gki/aarch64/abi.stg`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/gki/aarch64/abi.stg)\nfor `android16-6.12`) or generated in a local tree that includes the vendor\nmodules. The\n[tools to create and compare the ABI description](https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/abi/)\nfor the Kernel Module Interface (KMI) are also provided as part of the repo\ndescribed by the manifest.\n\nThe toolchain used to build the GKI kernel must be completely compatible with\nthe toolchain used to build vendor modules. As of Android\n10, all Android kernels must be built\nwith an LLVM toolchain. With GKI, the LLVM toolchain used to build product\nkernels and vendor modules must generate the same ABI as the LLVM toolchain from\nAOSP and partners must ensure that the KMI is compatible with the GKI kernel.\nUsing the provided build tools is strongly encouraged as they provide the\nbest compatibility.\n\nWhat's next?\n------------\n\n- For instructions on building the kernel using the hermetic build process and\n LLVM toolchain, refer to refer to\n [Build kernels](/docs/setup/build/building-kernels).\n\n- For instructions on how to monitor the ABI and fix issues, refer to\n [Android Kernel ABI Monitoring](/docs/core/architecture/kernel/abi-monitor)"]]