Configurer les fonctionnalités du kernel en tant que modules GKI

Cette page explique comment configurer une nouvelle fonctionnalité du noyau en tant que module GKI ou configurer une fonctionnalité intégrée existante du noyau en tant que module GKI.

Configurer une nouvelle fonctionnalité en tant que module GKI

  1. Pour la nouvelle fonctionnalité, modifiez gki_defconfig et définissez l'élément de configuration de la fonctionnalité de noyau requise de n sur m (=m). Définissez ce paramètre dans arch/arm64/configs/gki_defconfig et arch/x86/configs/gki_defconfig.

  2. Ajoutez les fichiers KO (.ko) générés pour la fonctionnalité à la section _COMMON_GKI_MODULES_LIST du fichier suivant. Ajoutez les fichiers dans un 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.

    • Dans android17-6.18 et versions ultérieures, ajoutez des éléments à common/bazel/modules_private.bzl.
    • Dans android16-6.12 et versions antérieures, ajoutez des éléments à common/modules.bzl.
  3. 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 module GKI protégé.

  4. 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.

  5. 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 system_dlkm.img dans la compilation de la plate-forme.

  6. Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de noyau réservée à Android. Il n'est donc pas nécessaire d'envoyer des correctifs de conversion de module en amont. Toutefois, vous devez suivre d'autres consignes pour envoyer des correctifs Android Common Kernel (ACK).

Configurer une fonctionnalité intégrée du noyau en tant que module GKI

  1. Pour une fonctionnalité intégrée existante du noyau, modifiez gki_defconfig et définissez l’élément de configuration de la fonctionnalité de noyau requise de y sur m (=m). Définissez ce paramètre dans arch/arm64/configs/gki_defconfig et arch/x86/configs/gki_defconfig.

  2. Ajoutez les fichiers KO (.ko) générés pour la fonctionnalité à la section _COMMON_GKI_MODULES_LIST du fichier suivant. Ajoutez les fichiers dans un 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.

    • Dans android17-6.18 et versions ultérieures, ajoutez des éléments à common/bazel/modules_private.bzl.
    • Dans android16-6.12 et versions antérieures, ajoutez des éléments à `common/modules.bzl.
  3. 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 module GKI protégé.

  4. Pour Android 14 et 15, mettez à jour la liste des exportations protégées afin d' inclure celles du module nouvellement ajouté dans common/android/abi_gki_protected_exports_{ARCH} à l'aide de tools/bazel run //common:kernel_aarch64_abi_update_protected_exports pour aarch64.

  5. Assurez-vous que les fichiers KO du module nouvellement converti de l'étape 2 sont copiés dans le noyau out/<androidX-Y.Z>/dist/system_dlkm.img et out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. Les modules de l'archive system_dlkm_staging_archive.tar.gz peuvent être utilisés comme entrée pour générer system_dlkm.img dans la compilation de la plate-forme.

  6. Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de noyau réservée à Android. Il n'est donc pas nécessaire d'envoyer des correctifs de conversion de module en amont. Toutefois, vous devez suivre les autres consignes pour envoyer des correctifs Android Common Kernel (ACK) patches.

Convertir un module GKI protégé en module non protégé

  1. Pour Android 15 et versions ultérieures, ajoutez le module converti de protégé à non protégé à la liste _COMMON_UNPROTECTED_MODULES_LIST dans le fichier suivant :

    • Dans android17-6.18 et versions ultérieures, ajoutez des éléments à common/bazel/modules_private.bzl.
    • Dans android16-6.12 et versions antérieures, ajoutez des éléments à common/modules.bzl.
  2. Pour Android 14, supprimez le module converti de protégé à non protégé de la liste des modules protégés dans common/android/gki_protected_modules.

  3. Pour Android 14 et 15, mettez à jour la liste des exportations protégées afin d'exclure celles du module non protégé nouvellement 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.

  4. Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de noyau réservée à Android. Il n'est donc pas nécessaire d'envoyer des correctifs de conversion de module en amont. Toutefois, vous devez suivre les autres consignes pour envoyer des correctifs Android Common Kernel (ACK) patches.

Guide rapide de résolution des violations de 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 des modules, ce qui entraîne un échec.

1. Module non signé utilisant le symbole protégé

Erreur :

module: Protected symbol: some_kernel_function (err -13)

Cause:

Le fichier module.ko est un module fournisseur non signé qui tente de résoudre le symbole exporté du module GKI some_kernel_function lors du chargement, sans être répertorié 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ésout 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 exportant 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 :

Vous pouvez corriger ce problème en utilisant la version GKI du module qui exporte some_kernel_function, si le module non signé est une version personnalisée.