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 den
surm
(=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 l'élément géographique à la sectionCOMMON_GKI_MODULES_LIST
decommon/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.(Facultatif) Pour Android 15 ou version ultérieure, ignorez cette étape.
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é.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écuteztools/bazel run //common:kernel_aarch64_abi_update_protected_exports
pouraarch64
. 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
out/<androidX-Y.Z>/dist/system_dlkm.img
etout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
du noyau. 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 le build de la plate-forme.Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de noyau 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 dey
surm
(=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 l'élément géographique à la sectionCOMMON_GKI_MODULES_LIST
decommon/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 à 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 un module GKI protégé. Mettez à jour la liste des exportations protégées pour inclure celles du nouveau module ajouté dans lecommon/android/abi_gki_protected_exports_{ARCH}
à l'aide detools/bazel run //common:kernel_aarch64_abi_update_protected_exports
pouraarch64
. 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 de module nouvellement convertis de l'étape 2 sont copiés dans
out/<androidX-Y.Z>/dist/system_dlkm.img
etout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
du noyau. 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 le build de la plate-forme.Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de noyau 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 commun Android (ACK).
Convertir un module GKI protégé en module non protégé
- Pour Android 14 et versions antérieures: supprimez le module en cours de conversion de protégé à non protégé de la liste des modules protégés dans
common/android/gki_protected_modules
.
- 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 fichiercommon/modules.bzl
.
- Pour Android 14 et versions antérieures: supprimez le module en cours de conversion de protégé à non protégé de la liste des modules protégés dans
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 detools/bazel run //common:kernel_aarch64_abi_update_protected_exports
pouraarch64
.Envoyez vos modifications pour examen. Les modules GKI sont une fonctionnalité de noyau 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.
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 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.