Unbekanntes Symbol im Modul, aber welches Symbol?

Unbekanntes Symbol im Modul, aber welches Symbol?

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 .koder 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.

verwandte Informationen