J'ai récemment parcouru le décompression du rpm hors du noyau (OpenSuse)? ; et comme il a fallu> 10 h sur ma machine, imaginez ma surprise qu'après avoir fait le processus décrit ici, je ne trouve nulle Module.symvers
part!
Lorsque je recherche "générer Module.symvers", j'obtiens ceci:
REMARQUE: "modules_prepare" ne construira pas Module.symvers même si
CONFIG_MODVERSIONS est défini; par conséquent, une construction complète du noyau doit être
exécutée pour que le contrôle de version des modules fonctionne.
( Documentation du noyau Linux :: kbuild: modules.txt )
... mais je ne comprends pas vraiment - le noyau n'a-t-il pas été construit à l'étape précédente (décrit dans le lien donné ci-dessus? Je sais bien qu'il a fallu plus de 10 h à CC pour générer un tas de * .o et LD pour les lier, donc quelque chose doit avoir été construit. Mais si oui, où est-il alors Module.symvers
?
En termes plus explicites, quelle commande dois-je appeler pour générer Module.symvers? Je sais que make prepare
cela ne fonctionnera pas - mais quelle est la commande qui fonctionnera?
la source
Module.symvers
parzypper install kernel-source
, et similaire sur d' autres distro linux. Le fichier se trouve danslib/modules/xxx/build
.Réponses:
Il
Module.symvers
est (re) généré lorsque vous (re) compilez des modules. Exécutezmake modules
et vous devriez obtenir unModule.symvers
fichier à la racine de l'arborescence du noyau.Notez que si vous avez seulement exécuté
make
et nonmake modules
, vous n'avez pas encore construit de modules. Les symboles du noyau lui-même (vmlinux
ou l'un des formats d'image dépendants de l'architecture) sont dansSystem.map
.la source
make modules
cela crée effectivementModule.symvers
. Merci également d'avoir clarifié la différence entremake
etmake modules
et la relation avecSystem.map
. À votre santé!insmod
.pour les personnes qui ont trouvé cette question en recherchant sur Google l'avertissement que vous obtenez lors de la compilation d'un exemple de LKM de Derek Molloy: vous pouvez simplement en créer un vide avec
touch Modules.symvers
. si votre noyau n'utilise pas de modversions (CRC utilisés par le système d'exploitation pour garantir que les modules correspondent au noyau) et que votre module n'a pas de dépendances avec les autres modules, ce sera suffisant pour supprimer l'avertissement.le fichier vide est tout aussi bon que celui généré par gcc, qui a juste les symboles tous avec la même
0x00000000
valeur CRC, sur un système sans modifications.la source
Sur CentOS, et peut-être d'autres variantes de RedHat, extrayez simplement le fichier correspondant pour votre noyau en cours d'exécution:
Sur Ubuntu et peut-être d'autres variantes de Debian, les fichiers se retrouvent automatiquement. Cependant, si vous en avez besoin, le fichier est ici:
la source
linux-headers-$(uname -r)
dossier