Comment exporter un symbole depuis un module externe?

Je code en dehors de l’arbre source du kernel. Il y a deux modules, le premier printt a une fonction printtty() pour imprimer la chaîne au tty actuel, et le second module hello qui appelle printtty() pendant l’initialisation.

J’ai ajouté EXPORT_SYMBOL(printtty) dans le module printt , et après insmod ./printt.ko , les informations de printtty() peuvent être vues dans /proc/kallsyms .

Le processus make du module hello va bien. Mais insmod ./hello.ko provoquera une erreur comme:

 insmod: ERROR: could not insert module hello.ko: Invalid parameters 

et dmesg montre

 hello: no symbol version for printtty hello: Unknown symbol printtty (err -22)`. 

J’ai corrigé cela par

(1) Copiez le fichier .ko dans un emplacement sous / lib / modules / version / kernel

(2) Ajouter les symboles exportés à /lib/modules/version/build/Module.symvers

Mais je me demande s’il existe un moyen d’exporter un symbole à partir d’un module externe (sans modifier l’arbre source du kernel)?

Ajoutez cette ligne tout en haut de votre Makefile pour votre module hello :

 KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers 

(assurez-vous de mettre le bon chemin vers votre module printt ).

Maintenant, reconstruisez votre module hello et il sera chargé correctement.

Pour plus de détails, voir Documentation / kbuild / modules.txt , “6.3 Symboles d’un autre module externe”.