module_layout incompatibilité des versions
J'essaie de insmod un noyau linux héritage module porté par moi.
Les erreurs suivantes s'affichent:
> sudo insmod camac-mx.ko
insmod: error inserting 'camac-mx.ko': -1 Invalid module format
dmesg |tail -n 1
[1312783.938299] camac_mx: disagrees about version of symbol module_layout
Comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Cela indique que vous avez compilé le module à l'encontre d'une autre version du noyau que ce qui est en cours d'exécution. Notez que même si le noyau en cours d'exécution et source du noyau ont la même valeur numérique (par exemple, les deux sont 2.6.31-20-serveur), si les deux utiliser les différentes options de configuration, vous pouvez voir cette erreur. Vérifiez également s'il existe plusieurs versions de ce module sur la machine et s'assurer que vous chargez le bon.
Pour ceux qui travaillent sur des systèmes sans accès à noyau, noyau de config ou ksyms, si vous avez un
working.ko
et de votre bâti, de non-travail,broken.ko
.Les Chances sont qu'il ne sera probablement pas de charge, mais si vous êtes assez désespéré pour essayer;
Puis à l'aide de votre favori éditeur hexadécimal, changer de match:
(La valeur est dans le sens inverse en raison de endian de la commande)
Il y aura probablement tout un tas, vous devez faire correspondre. Quelqu'un pourrait écrire un script perl pour ce faire....
À résoudre que (a été dur).
Tout d'abord, vous avez besoin des sources du noyau et les en-têtes.
Aller à votre noyau de la base de dir, ici /usr/src/linux-source-2.6.35
Vérifier uname -r , ici 2.6.35-27-generic
/lib/modules/2.6.35-27-générique/build -> /usr/src/linux-headers-2.6.35-27-générique
Vérifier les dépendances de modules avec modinfo ou lsmod et de les charger dans un script :
Avec cette méthode, vermagic pourrait également être différents.... le make modules_install était inutile, mais peut-être parce que les modules sont présents dans 2 endroits différents (/lib/modules/extra et .../kernel/drivers), ce n'est pas remplacé...
modinfo -F vermagic /usr/src/linux-source-2.6.35/drivers/net/wireless/ath/ath5k/ath5k.ko
Je n'ai pas vraiment à comprendre pourquoi il est si difficile dans ubuntu 10.10 corriger/debug d'un module 🙁
Rapide et solution de travail a été trouvé ici.
Suffit d'utiliser
modules/build
répertoire dans votremakefile
, PAS/usr/src/linux-source
.J'ai de système android avec un module binaire (pvrsrvkm pour les graphiques). J'ai été la construction de noyaux à partir de la source de ce système. En général, tous fonctionne très bien, mais avec du noyau .les options de configuration (pour kgdb), le pvrsrvkm module ne se charge pas avec "n'est pas d'accord à propos de la version de symbole d'erreur".
La pvrsrvkm module est chargé par android au début et quand il échoue, le système est inutilisable sans interface graphique.
Depuis que j'étais déjà en train de noyau, mon petit correctif a été de désactiver la vérification de version en ajoutant une ligne (versindex = 0;) pour le code source du noyau de fichier kernel/module.c:
Avant dans votre code source du noyau
faire propre ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
Modifier le fichier source du noyau : Module.symvers changement "Module_layout" travaillé avec une, vous pouvez rechercher ce fichier sur votre appareil
Recompiler le pilote exemple :
make-C ~/source-noyau ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf - DIR=/source-noyau M=/modules/exemple de modules
Vérifier module_layout dans XXX.ko
avec : sudo modprobe --dump-modversions XXX.ko
NB