Sie müssen Ihr Kernel-Modul für dieselbe Kernel-Version erstellen, die Sie ausführen werden. Wenn Sie also Kernel 4.3-Quellen heruntergeladen haben, müssen Sie das kompilieren Version des Kernels und booten Sie damit, bevor Sie versuchen, Ihren Kernel zu laden.
Sie haben dann zwei Lösungen:
- Laden Sie die Kernel-Quellen für den Kernel herunter, den Sie gerade ausführen (Sie können diese mit
zypper install kernel-source
installieren auf SLES oder einem entsprechenden Befehl auf anderen Distributionen.) - Kompilieren und installieren Sie den 4.3-Kernel in Ihrem Betriebssystem. Wenn Sie dabei Hilfe benötigen, stellen Sie eine separate Frage (und sie gehört wahrscheinlich zum Superuser, nicht hierher). Beachten Sie, dass, wenn Kernel und Glibc eng gekoppelt sind, es möglich ist, dass Sie keinen neuen Kernel ausführen können, wenn Sie eine sehr alte C-Bibliothek haben.
make -C /lib/modules/$(uname -r)/build M=$PWD modules, "$(uname -r)" zeigt, dass Sie gegen die Kernel-Version kompilieren, die Sie jetzt ausführen, also sollten Sie in der Lage sein, insmod das Modul im aktuellen Kernel, wenn Sie die Header nicht geändert haben.
Aus Ihrem Text:"Nur zur Überprüfung habe ich ein paar Dateien aus den Kernel-Verzeichnissen in mein Projektverzeichnis kopiert. Änderungen daran vorgenommen und etwas mehr Code eingefügt."
Wenn Sie Änderungen an der Kernelquelle vorgenommen haben, müssen Sie möglicherweise den neuen Kernel neu kompilieren und mit dem neuen aktualisierten Kernel booten. Dann sollten Sie in der Lage sein, Ihr Kernelmodul mit den geänderten Headern zu kompilieren.
Das Problem dabei ist, dass Ihr Kernel-Modul die exportierten Symbole anderer Kernel-Module verwendet, die in diesem Fall die exportierten Methoden oder Symbole des Linux InfiniBand RDMA-Stacks zu sein scheinen.
Um die Probleme mit der Symbolversion zu lösen, kopieren Sie die Datei Module.symvers
Datei aus dem
/usr/src/ofa-kernel
Verzeichnis und fügen Sie es in Ihr aktuelles Arbeitsverzeichnis ein. Dann machst du deine Module neu. Jetzt die insmod
sollte einwandfrei funktionieren.
HINWEIS:Die Datei Module.symvers enthält Informationen über alle exportierten Kernelmodule-Symbole. Indem Sie es also in Ihr Arbeitsverzeichnis kopieren, helfen Sie kbuild, mehr über die verwendeten exportierten Symbole zu erfahren.
Und wenn Sie Module.symvers nicht finden oder es leer ist, erstellen Sie eines mit create_Module.symvers.sh