À 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.
Configurer les fonctionnalités du kernel en tant que modules GKI
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Cette page explique comment configurer une nouvelle fonctionnalité de kernel en tant que module GKI ou configurer une fonctionnalité de kernel intégrée existante en tant que module GKI.
Configurer une nouvelle fonctionnalité en tant que module GKI
Pour la nouvelle fonctionnalité, modifiez gki_defconfig et définissez l'élément de configuration de la fonctionnalité de kernel requise de n sur m (=m). Définissez ce paramètre dans arch/arm64/configs/gki_defconfig et arch/x86/configs/gki_defconfig.
Ajoutez les fichiers KO (.ko) générés pour l'élément géographique à la section COMMON_GKI_MODULES_LIST de common/modules.bzl. Ajoutez les fichiers dans l'ordre trié. Si vous n'êtes pas sûr de tous les fichiers générés, la compilation échoue et liste tous les fichiers KO nécessaires à ajouter à la liste.
Pour Android 14, ajoutez le même ensemble de fichiers KO de l'étape 2, triés par ordre croissant pour la recherche binaire au moment de l'exécution, à common/android/gki_{ARCH}_protected_modules pour désigner le module comme un module GKI protégé.
Pour Android 14 et 15, mettez à jour la liste des exportations afin qu'elle inclue les exportations nouvellement ajoutées dans common/android/abi_gki_protected_exports_ARCHITECTURE. Par exemple, pour mettre à jour la liste, exécutez tools/bazel run //common:kernel_aarch64_abi_update_protected_exports pour aarch64.
Assurez-vous que les fichiers KO nouvellement ajoutés à l'étape 2 sont copiés dans out/<androidX-Y.Z>/dist/system_dlkm.img et out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz du noyau.
Les modules de l'archive system_dlkm_staging_archive.tar.gz peuvent être utilisés comme entrée pour générer le system_dlkm.img dans le build de la plate-forme.
Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de kernel réservée à Android. Par conséquent, les correctifs de conversion de module ne sont pas nécessaires à l'amont. Toutefois, vous devez suivre d'autres consignes pour envoyer des correctifs du kernel Android commun (ACK).
Configurer une fonctionnalité intégrée au noyau en tant que module GKI
Pour une fonctionnalité de kernel intégrée existante, modifiez gki_defconfig et définissez l'élément de configuration de la fonctionnalité de kernel requise de y sur m (=m). Définissez ce paramètre dans arch/arm64/configs/gki_defconfig et arch/x86/configs/gki_defconfig.
Ajoutez les fichiers KO (.ko) générés pour l'élément géographique à la section COMMON_GKI_MODULES_LIST de common/modules.bzl. Ajoutez les fichiers dans l'ordre trié. Si vous n'êtes pas sûr de tous les fichiers générés, la compilation échoue et liste tous les fichiers KO nécessaires à ajouter à la liste.
Pour Android 14, ajoutez le même ensemble de fichiers KO de l'étape 2, triés par ordre croissant pour la recherche binaire au moment de l'exécution, à common/android/gki_{ARCH}_protected_modules pour désigner le module comme un module GKI protégé.
Pour Android 14 et 15, mettez à jour la liste des exportations protégées pour inclure celles du nouveau module ajouté dans common/android/abi_gki_protected_exports_{ARCH} à l'aide de tools/bazel run
//common:kernel_aarch64_abi_update_protected_exports pour aarch64.
Assurez-vous que les fichiers KO de module nouvellement convertis de l'étape 2 sont copiés dans out/<androidX-Y.Z>/dist/system_dlkm.img et out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz du noyau.
Les modules de l'archive system_dlkm_staging_archive.tar.gz peuvent être utilisés comme entrée pour générer le system_dlkm.img dans le build de la plate-forme.
Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de kernel réservée à Android. Par conséquent, les correctifs de conversion de module ne sont pas nécessaires à l'amont. Toutefois, vous devez suivre les autres consignes pour envoyer des correctifs du kernel Android commun (ACK).
Convertir un module GKI protégé en non protégé
Pour Android 15 et versions ultérieures, ajoutez le module en cours de conversion de protégé à non protégé à la liste COMMON_UNPROTECTED_MODULES_LIST dans le fichier common/modules.bzl.
Pour Android 14, supprimez le module en cours de conversion de protégé à non protégé de la liste des modules protégés à l'emplacement common/android/gki_protected_modules.
Pour Android 14 et 15, mettez à jour la liste des exportations protégées pour exclure celles du nouveau module non protégé converti dans le common/android/abi_gki_protected_exports_{ARCH} à l'aide de tools/bazel run
//common:kernel_aarch64_abi_update_protected_exports pour aarch64.
Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de kernel réservée à Android. Par conséquent, les correctifs de conversion de module ne sont pas nécessaires à l'amont. Toutefois, vous devez suivre les autres consignes pour envoyer des correctifs du kernel Android commun (ACK).
Guide rapide de résolution des cas de non-respect des symboles des modules GKI
Lorsque des modules non signés enfreignent la protection des symboles en place pour les modules GKI, deux types d'erreurs peuvent se produire lors du chargement du module, ce qui entraîne un échec.
Le fichier module.ko est un module fournisseur non signé et tente de résoudre le symbole some_kernel_function exporté par le module GKI lors du chargement, sans figurer dans la liste des symboles du fournisseur.
Solution :
Si module.ko n'est pas un module GKI protégé, la mise à jour de la liste des symboles résoudra l'erreur en incluant some_kernel_function dans la liste des symboles du fournisseur.
Vous pouvez également utiliser la version GKI de module.ko.
2. Module non signé exportant le symbole protégé
Erreur:
module: exports protected symbol some_kernel_function
Cause :
Le module qui exporte some_kernel_function est un module GKI protégé, et module.ko est probablement une version personnalisée non signée de ce module. Lorsque module.ko tente d'exporter some_kernel_function, qui ne peut être exporté que par un module GKI signé, le chargement échoue avec ce message.
Solution :
Pour corriger ce problème, utilisez la version GKI du module qui exporte some_kernel_function, si le module non signé est une version personnalisée.
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,["# Configure kernel features as GKI modules\n\nThis page covers how to configure a new kernel feature as a GKI module or\nconfigure an existing built-in kernel feature as a GKI module.\n| **Note:** Changes that result in a new GKI module or that change the protection status of a GKI module must be approved by Google.\n\nConfigure a new feature as a GKI module\n---------------------------------------\n\n1. For the new feature, edit `gki_defconfig` and set the required kernel\n feature's config item from `n` to `m` (`=m`). Set this setting in both\n `arch/arm64/configs/gki_defconfig` and `arch/x86/configs/gki_defconfig`.\n\n2. Add the KO (`.ko`) files generated for the feature\n to the `COMMON_GKI_MODULES_LIST` section of `common/modules.bzl`. Add the\n files in a sorted order. If you're unsure of all the files generated,\n the build fails and lists all the necessary KO files to be added to the list.\n\n3. For Android 14, add the same set of KO files from step 2, sorted in ascending\n order for binary search at runtime, to\n `common/android/gki_{ARCH}_protected_modules` to designate the module as a\n protected GKI module.\n\n4. For Android 14 and 15, update the list of exports so that it includes the\n newly-added exports in `common/android/abi_gki_protected_exports_`\u003cvar translate=\"no\"\u003eARCHITECTURE\u003c/var\u003e. For example, to update the list, run\n `tools/bazel run //common:kernel_aarch64_abi_update_protected_exports` for\n `aarch64`.\n\n5. Make sure newly added KO files from step 2 are copied to the kernel's\n `out/\u003candroidX-Y.Z\u003e/dist/system_dlkm.img` and\n `out/`\u003cvar translate=\"no\"\u003eandroidX-Y.Z\u003c/var\u003e`/dist/system_dlkm_staging_archive.tar.gz`.\n Modules in the `system_dlkm_staging_archive.tar.gz` archive can be used as\n input to generate the `system_dlkm.img` in the platform build.\n\n6. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow other guidelines to submit\n [Android Common Kernel (ACK) patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nConfigure a kernel built-in feature as a GKI module\n---------------------------------------------------\n\n1. For an existing built-in kernel feature, edit `gki_defconfig` and set the\n required kernel feature's config item from `y` to `m` (`=m`). Set this\n setting in both `arch/arm64/configs/gki_defconfig` and\n `arch/x86/configs/gki_defconfig`.\n\n2. Add the KO (`.ko`) files generated for the feature to the\n `COMMON_GKI_MODULES_LIST` section of `common/modules.bzl`. Add the files\n in a sorted order. If you're unsure of all the files generated,\n the build fails and lists all the necessary KO files to be added to the list.\n\n3. For Android 14, add the same set of KO files from step 2, sorted in ascending\n order for binary search at runtime, to\n `common/android/gki_{ARCH}_protected_modules` to designate the module as a\n protected GKI module.\n\n4. For Android 14 and 15, update the list of exports that are protected to\n include ones from the newly added module in\n `common/android/abi_gki_protected_exports_{ARCH}` using `tools/bazel run\n //common:kernel_aarch64_abi_update_protected_exports` for `aarch64`.\n\n5. Make sure newly converted module KO files from step 2 are copied to the\n kernel's `out/\u003candroidX-Y.Z\u003e/dist/system_dlkm.img` and\n `out/`\u003cvar translate=\"no\"\u003eandroidX-Y.Z\u003c/var\u003e`/dist/system_dlkm_staging_archive.tar.gz`.\n Modules in the `system_dlkm_staging_archive.tar.gz` archive can be used as\n input to generate the `system_dlkm.img` in the platform build.\n\n6. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow the other guidelines to submit\n [Android Common Kernel (ACK)\n patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nConvert a protected GKI module to unprotected\n---------------------------------------------\n\n1. For Android 15 and higher, add the module being converted from protected to\n unprotected to the `COMMON_UNPROTECTED_MODULES_LIST` list in\n `common/modules.bzl` file.\n\n2. For Android 14, remove the module being converted from protected to\n unprotected from the list of protected modules at\n `common/android/gki_protected_modules`.\n\n3. For Android 14 and 15, update the list of exports that are protected to\n exclude ones from the newly converted unprotected module in the\n `common/android/abi_gki_protected_exports_{ARCH}` using `tools/bazel run\n //common:kernel_aarch64_abi_update_protected_exports` for `aarch64`.\n\n4. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow the other guidelines to submit\n [Android Common Kernel (ACK)\n patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nGKI modules symbol violation resolution quick guide\n---------------------------------------------------\n\nWhen unsigned modules violate the symbol protection in place for GKI modules,\ntwo types of errors may be encountered during module loading, resulting in\nfailure.\n\n### 1. Unsigned module using the protected symbol\n\n**Error:**\n\n`module: Protected symbol: some_kernel_function (err -13)`\n\n**Cause:**\n\nThe `module.ko` file is an unsigned vendor module and attempts to resolve the\nGKI module exported symbol `some_kernel_function` during loading, without\nbeing listed in the vendor symbol list.\n\n**Resolution:**\n\nIf `module.ko` is not a protected GKI module, updating the symbol list will\nresolve the error by including `some_kernel_function` in the vendor symbol list.\nAlternatively, use the GKI version of `module.ko`.\n\n### 2. Unsigned module exporting the protected symbol\n\n**Error:**\n\n`module: exports protected symbol some_kernel_function`\n\n**Cause:**\n\nThe module exporting the `some_kernel_function` is a protected GKI module, and\n`module.ko` is likely an unsigned custom version of that module. When\n`module.ko` tries to export `some_kernel_function`, which can only be exported\nby a signed GKI module, loading fails with this message.\n\n**Resolution:**\n\nThis can be corrected by using the GKI version of the module that exports\n`some_kernel_function`, if the unsigned module is a custom version."]]