2013-06-22 7 views
5

Ich schreibe ein ladbares Kernel-Modul und versuche es zu testen. Nach dem Einfügen habe ich versucht, es mit rmmod xxx Befehl zu entfernen, aber ich bekomme eine Fehlermeldung module xxx is in use und das Modul wird stecken bleiben und ich kann es nicht entfernen. Irgendeine Idee, wie Sie das Modul entfernen, ohne den gesamten Rechner neu zu starten? (Linux-Kernel v 3.5.0.)Nicht in der Lage, ein ladbares Kernel-Modul zu entfernen

Hinweis: rmmod -f druckt Error: device or resource busy

+0

Vielleicht 'rmmod -f'? –

+0

'rmmod -f' funktioniert nicht, es druckt' ERROR: Gerät oder Ressource beschäftigt' –

+2

Nun, dann neu starten. (Und denken Sie daran, in einer VM mit dem Kernel herumzuspielen und nicht mit Ihrem Haupt-Host. Das Neustarten ist dann kein Problem.) – Mat

Antwort

8

Dies ist nur mir passiert, wenn es einen Fehler in meinem Fahrer ist, der den Code in das Modul verursacht in irgendeiner Weise zur Panik oder Absturz . Nach meiner Erfahrung ist ein Neustart der einzig mögliche Weg.

Wie ich schon sagte, der Kernel ist in der Regel in Panik, so dass Sie dmesg nach dem Einfügen oder Ausführen Ihrer Anwendung auschecken sollten. Ich bin mir nicht sicher, aber es ist möglich, dass, wenn der Treiber keinen Mutex freigibt, dieses Verhalten ebenfalls auftritt.

1

Überprüfen Sie, ob die Funktion module_exit korrekt ist. Möglicherweise müssen Sie Ihren Kernel kompilieren, damit "MODULE_FORCE_UNLOAD = yes" das Modul entfernt, ohne den gesamten Rechner neu zu starten.