Cette page explique comment configurer une nouvelle fonctionnalité du noyau en tant que module GKI ou configurer une fonctionnalité du noyau 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é du noyau requis den
àm
(=m
). Définissez ce paramètre dansarch/arm64/configs/gki_defconfig
etarch/x86/configs/gki_defconfig
.Ajoutez les fichiers KO (
.ko
) générés pour la fonctionnalité à la sectionCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Ajoutez les fichiers dans un ordre trié. Si vous n'êtes pas sûr de tous les fichiers générés, la construction échoue et répertorie tous les fichiers KO nécessaires à ajouter à la liste.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é. Mettez à jour la liste des exportations protégées pour inclure celles du module nouvellement ajouté danscommon/android/abi_gki_protected_exports_{ARCH}
à l'aide detools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. Les modules désignés comme modules GKI protégés doivent toujours être approuvés par Google pour être des modules protégés officiels.Assurez-vous que les fichiers KO nouvellement ajoutés à l'étape 2 sont copiés dans les fichiers
out/<androidX-YZ>/dist/system_dlkm.img
etout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Les modules de l'archivesystem_dlkm_staging_archive.tar.gz
peuvent être utilisés comme entrée pour générer lesystem_dlkm.img
dans la version de la plateforme.Soumettez vos modifications pour examen. Les modules GKI sont une fonctionnalité du noyau Android uniquement, il n'est donc pas nécessaire que les correctifs de conversion de module soient soumis en amont. Cependant, vous devez suivre d'autres directives pour soumettre des correctifs Android Common Kernel (ACK) .
Configurer une fonctionnalité intégrée au noyau en tant que module GKI
Pour une fonctionnalité de noyau intégrée existante, modifiez
gki_defconfig
et définissez l'élément de configuration de la fonctionnalité de noyau requise dey
àm
(=m
). Définissez ce paramètre dansarch/arm64/configs/gki_defconfig
etarch/x86/configs/gki_defconfig
.Ajoutez les fichiers KO (
.ko
) générés pour la fonctionnalité à la sectionCOMMON_GKI_MODULES_LIST
decommon/modules.bzl
. Ajoutez les fichiers dans un ordre trié. Si vous n'êtes pas sûr de tous les fichiers générés, la construction échoue et répertorie tous les fichiers KO nécessaires à ajouter à la liste.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é. Mettez à jour la liste des exportations protégées pour inclure celles du module nouvellement ajouté danscommon/android/abi_gki_protected_exports_{ARCH}
à l'aide detools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. Les modules désignés comme modules GKI protégés doivent toujours être approuvés par Google pour être des modules protégés officiels.Assurez-vous que les fichiers KO du module nouvellement convertis à l'étape 2 sont copiés dans les fichiers
out/<androidX-YZ>/dist/system_dlkm.img
etout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. Les modules de l'archivesystem_dlkm_staging_archive.tar.gz
peuvent être utilisés comme entrée pour générer lesystem_dlkm.img
dans la version de la plateforme.Soumettez vos modifications pour examen. Les modules GKI sont une fonctionnalité du noyau Android uniquement, il n'est donc pas nécessaire que les correctifs de conversion de module soient soumis en amont. Cependant, vous devez suivre les autres directives pour soumettre les correctifs Android Common Kernel (ACK) .
Convertir un module GKI protégé en module non protégé
Supprimez le module en cours de conversion de protégé en non protégé de la liste des modules protégés dans
common/android/gki_protected_modules
.Mettez à jour la liste des exportations protégées pour exclure celles du module non protégé nouvellement converti dans le
common/android/abi_gki_protected_exports_{ARCH}
à l'aidetools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
.Soumettez vos modifications pour examen. Les modules GKI sont une fonctionnalité du noyau Android uniquement, il n'est donc pas nécessaire que les correctifs de conversion de module soient soumis en amont. Cependant, vous devez suivre les autres directives pour soumettre les correctifs Android Common Kernel (ACK) .
Guide rapide de résolution des violations de symboles des modules GKI
Lorsque des modules non signés violent la protection des symboles en place pour les modules GKI, deux types d'erreurs peuvent survenir lors du chargement du module, entraînant 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é et 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.
Ré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 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.
Résolution:
Cela peut être corrigé en utilisant la version GKI du module qui exporte some_kernel_function
, si le module non signé est une version personnalisée.