Ich habe kürzlich Kernel-Source-RPM-Off-System (OpenSuse) entpackt. ; und da es> 10 h auf meiner maschine gedauert hat, stelle ich mir meine überraschung vor, dass ich nach dem dort beschriebenen prozess Module.symvers
nirgendwo finde !
Wenn ich nach "generate Module.symvers" suche, erhalte ich Folgendes:
HINWEIS: "modules_prepare" erstellt keine Module.symvers, selbst wenn
CONFIG_MODVERSIONS festgelegt ist. Daher muss ein vollständiger Kernel-Build
ausgeführt werden, damit die Modulversionierung funktioniert.
( Linux-Kernel-Dokumentation :: kbuild: modules.txt )
... aber ich verstehe es nicht wirklich - wurde der Kernel nicht im vorherigen Schritt erstellt (beschrieben im obigen Link? Ich weiß, dass es> 10 Stunden gedauert hat, bis CC eine ganze Reihe von * .o generiert hat Dateien und LD, um sie zu verknüpfen, also muss etwas erstellt worden sein. Aber wenn ja, wo ist es dann Module.symvers
?
Genauer gesagt, welchen Befehl soll ich aufrufen, um Module.symvers zu generieren? Ich weiß, dass make prepare
das nicht funktionieren wird - aber was ist der Befehl, der es tun wird?
quelle
Module.symvers
mitzypper install kernel-source
anderen Linux-Distributionen zurecht. Die Datei befindet sich inlib/modules/xxx/build
.Antworten:
Das
Module.symvers
wird (neu) generiert, wenn Sie Module (neu) kompilieren. Führenmake modules
Sie es aus und Sie sollten eineModule.symvers
Datei im Stammverzeichnis des Kernelbaums erhalten.Beachten Sie, dass Sie, wenn Sie nur ausgeführt haben
make
und nichtmake modules
, noch keine Module erstellt haben. Die Symbole aus dem Kernel selbst (vmlinux
oder einem der architekturabhängigen Bildformate) befinden sich inSystem.map
.quelle
make modules
das in der Tat schafftModule.symvers
. Vielen Dank auch für die Klärung des Unterschieds zwischenmake
undmake modules
und der Beziehung zuSystem.map
. Prost!insmod
.Für Leute, die diese Frage gefunden haben, indem Sie die Warnung gegoogelt haben, die Sie erhalten, wenn Sie ein Beispiel-LKM von Derek Molloy kompilieren: Sie können einfach ein leeres mit erstellen
touch Modules.symvers
. Wenn Ihr Kernel keine Modversionen verwendet (CRCs, die vom Betriebssystem verwendet werden, um sicherzustellen, dass die Module mit dem Kernel übereinstimmen) und Ihr Modul keine Abhängigkeiten von anderen Modulen aufweist, reicht dies aus, um die Warnung zu unterdrücken.Die leere Datei ist genauso gut wie die von gcc generierte Datei
0x00000000
, die auf einem System ohne Modversionen nur die Symbole mit demselben CRC-Wert enthält.quelle
Extrahieren Sie unter CentOS und anderen RedHat-Varianten einfach die entsprechende Datei für Ihren laufenden Kernel:
Unter Ubuntu und vielleicht anderen Debian-Varianten werden die Dateien automatisch gefunden. Wenn Sie es jedoch benötigen, finden Sie die Datei hier:
quelle
linux-headers-$(uname -r)
Ordner nicht finden