Ich arbeite mit einer großen Embedded-Software (ARM-Prozessor, Embedded Linux 2.6.31, Busybox) mit Kernel-und User-Space-Code. Es gibt ein Kernelmodul, das normalerweise zuerst geladen wird, und ein Daemon, der netlink Socket mit dem Modul einrichtet.unfähig zu "rmmod" das Modul
Das Problem hierbei ist, dass der Dämon nach der Tötung, ich bin nicht mehr in der Lage das Modul aus dem Speicher zu entfernen:
% rmmod _module.ko
% rmmod: _module.ko: Resource temporarily unavailable
Analyse, dass Fehler gezeigt hat (Rückgabewert -11
, dh EAGAIN
?) wird von try_stop_module()
zurückgegeben in syscall delete_module()
Definition in kernel/module.c
. Die Funktion try_stop_module() wiederum ruft stop_machine() auf und hier bin ich stecken geblieben, wie
Ich bin mir nicht sicher, was genau dort passiert. Ich denke, die Ursache ist irgendwo im Daemon, der Verbindungen zum Modul und offensichtlich etwas anderes öffnet und beim Beenden nicht korrekt schließt/aufräumt (anscheinend werden einige Referenzen/Sperren nicht freigegeben?)
Hat jemand Irgendeine Idee, was sonst noch zu sehen und zu prüfen?
Nur eine blöde Idee ... rmmod -f ... das Entladen erzwingen? –