J'essaie actuellement d'exécuter un module de noyau. Ce module semble bien fonctionner sur diverses machines Linux, cependant, lorsque j'essaie de l'exécuter sur une machine spécifique (nommément Centos avec une version du noyau de 2,6), le module ne parvient pas à démarrer, affirmant que je n'ai pas défini de module Licence et, par conséquent, ne me permettant pas d'utiliser diverses API de noyau nécessaires. P>
J'ai défini Module_License ("GPL") dans le bas de mon fichier source principal (celui qui contient module_init et module_exit), et aussi loin que tous les exemples que je pourrais trouver, c'est suffisant. Je dois noter que mon projet a plusieurs fichiers. P>
Je suis une sorte de stuped, alors toute aide serait appréciée. P>
3 Réponses :
Pour un démarrage, vérifiez que les informations de licence sont présentes dans votre fichier d'objet de module. P>
objdump -sj.modinfo YourModule.ko em> p>
D'accord, j'ai compris ce que j'ai mal fait. J'ai tenté d'activer le drapeau -Werror pour la compilation de ma module. Ce faisant, j'ai ajouté la ligne suivante au Makefile: p>
CFLAGS_MODULE = -WERROR P>
Je suppose que cela gâchra quelque chose sur la licence du module du noyau. Supprimer cette ligne rendit le module fonctionner à nouveau. Si vous avez ce genre de problème, assurez-vous que vous ne jouez pas avec des variables d'environnement dans votre maquillage. P>
Je n'ai pas de drapeau de ce type dans mon fichier de fabrication, mais voyant la même erreur malgré le module_license dans mon module.
Je viens de rencontrer le même problème, qui n'a été fixé qu'après avoir écrit module_license ("gpl") code> au début (après l'inclusion) de chaque fichier fort> c Le maquillage du module fait référence à. P>
Merci. C'était mon problème aussi. (Je pense que beaucoup de gens construisent des modules "1 fichier" et ne voient pas cela.)
Vous avez compilé le module sur chaque machine à nouveau, n'est-ce pas?
Oui, je l'ai compilé sur deux machines distinctes. J'ai compris la solution, voir ci-dessous.