Wie kann ich Module.symvers generieren?

14

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.symversnirgendwo 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 preparedas nicht funktionieren wird - aber was ist der Befehl, der es tun wird?

sdaau
quelle
Zu Ihrer Information, unter opensuse kommen Sie vielleicht Module.symversmit zypper install kernel-sourceanderen Linux-Distributionen zurecht. Die Datei befindet sich in lib/modules/xxx/build.
Syrtis Major

Antworten:

16

Das Module.symverswird (neu) generiert, wenn Sie Module (neu) kompilieren. Führen make modulesSie es aus und Sie sollten eine Module.symversDatei im Stammverzeichnis des Kernelbaums erhalten.

Beachten Sie, dass Sie, wenn Sie nur ausgeführt haben makeund nicht make modules, noch keine Module erstellt haben. Die Symbole aus dem Kernel selbst ( vmlinuxoder einem der architekturabhängigen Bildformate) befinden sich in System.map.

Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank dafür, @Gilles - ich hatte seitdem auch Antwort gefunden : Module.symvers-Datei ; und kann bestätigen, dass make modulesdas in der Tat schafft Module.symvers. Vielen Dank auch für die Klärung des Unterschieds zwischen makeund make modulesund der Beziehung zu System.map. Prost!
Sdaau
Was ist, wenn "make" auf dem Computer nicht verfügbar ist?
bzupnick
2
@bzupnick Installiere es. Es ist eines der notwendigen Tools zum Erstellen von Linux-Kernelmodulen. Viele Softwareprodukte benötigen make, um erstellt zu werden.
Gilles 'SO- hör auf böse zu sein'
Ich versuche, ein LKM von einem anderen Computer aus zu kompilieren. Das Installieren von Dingen auf der ersten Box ist nicht möglich.
bzupnick
@bzupnick Du musst make machen, um das Modul trotzdem zu bauen. Es geschieht alles auf der Build-Maschine, auf der Zielmaschine gibt es nichts zu tun, außer insmod.
Gilles 'SO- hör auf böse zu sein'
3

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.

WARNING: Symbol version dump ./Module.symvers
         is missing; modules will have no dependencies and modversions.

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.

jcomeau_ictx
quelle
1

Extrahieren Sie unter CentOS und anderen RedHat-Varianten einfach die entsprechende Datei für Ihren laufenden Kernel:

zcat /boot/symvers-$(uname -r).gz > ./Module.symvers

Unter Ubuntu und vielleicht anderen Debian-Varianten werden die Dateien automatisch gefunden. Wenn Sie es jedoch benötigen, finden Sie die Datei hier:

/usr/src/linux-headers-$(uname -r)/Module.symvers
Id2ndR
quelle
Ich kann linux-headers-$(uname -r)Ordner nicht finden
King Stone