Ich kompiliere einen Treiber gemäß der Dokumentation. Aber wenn ich versuche, sie über
insmod onebox_wlan_nongpl.ko
, erhalte ich eine Fehlermeldung:
insmod: Fehler: Modul onebox_wlan_nongpl.ko konnte nicht eingefügt werden: Unbekanntes Symbol im Modul
Ich weiß, dass dies an der falschen Reihenfolge beim Laden .ko
der Dateien liegt, aber es wird mir nicht gesagt, von welchem Modul es abhängt. Ich würde gerne wissen, welches Symbol unbekannt ist, um das Modul zu speichern, das ich zuerst laden soll.
Antwort1
Sie können die fehlenden Symbole einfach in dmesg mit überprüfen dmesg | tail
. Wenn Sie überprüfen möchten, ob die Symbole tatsächlich in Ihrer Symboltabelle vorhanden sind, überprüfen Sie dies mit cat /proc/kallsyms | grep <function_name>
Ähnliches Problem:
https://ubuntuforums.org/showthread.php?t=1360950
Antwort2
Um zu sehen, welche Symbole tatsächlich fehlen, schaue mit in das Kernel-Log dmesg
. Dort werden dir die genauen Symbole angezeigt. Wenn du das Kernel-Modul selbst geschrieben hast und es beispielsweise auf einem Framework wie dem Device Mapping Framework basiert, muss die Abhängigkeit zuerst geladen werden. Hier ein Beispiel, auf das ich gestoßen bin:
Ich schrieb eineGerätemapper, was vom Gerätezuordnungsframework abhängt. Beim Einfügen geschieht Folgendes:
$ sudo insmod some-module.ko
insmod: ERROR: could not insert module some-module.ko: Unknown symbol in module
Überprüfen Sie das Kernel-Protokoll:
$ sudo dmesg
[ XX.XXXXXX] some-module.ko: Unknown symbol dm_per_bio_data (err -2)
[ XX.XXXXXX] some-module.ko: Unknown symbol dm_put_device (err -2)
...
Überprüfen Sie die geladenen Module:
$ lsmod | grep dm
<NOTHING>
Fügen Sie den Zieltreiber für die Gerätezuordnung ein:
$ sudo modprobe dm_mod
$ lsmod | grep dm
dm_mod 184320 0
Stecken Sie nun das Originalmodul ein und der Fehler ist behoben.