Welcher Prozess benutzt das Modul

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Welcher Prozess benutzt das Modul

Beitrag von Kermit24 » 19.10.2010 18:03:43

Hallo,
wenn ich beim Versuch ein Modul zu entladen "FATAL: Module xyz is in use" bekomme: Kann ich dann irgendwie herausfinden, welcher Prozes das Modul noch am nutzen ist?

Achja. Bei einem lsmod steht in der Spalte "User by" eine 1, sonst nichts. Bei anderen Modulen werden hinter der Zahl noch weitere Module aufgelistet.

uname
Beiträge: 12424
Registriert: 03.06.2008 09:33:02

Re: Welcher Prozess benutzt das Modul

Beitrag von uname » 19.10.2010 20:55:09

lsof gibt sehr viel aus. Musst mal probieren.

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Welcher Prozess benutzt das Modul

Beitrag von Kermit24 » 19.10.2010 22:28:31

lsof zeigt nur auf welche Datei/Gerät ein Prozess zugreift, aber keine Zuordnung zwischen Modulen und Prozessen. Ist so eine Zuordnung im Kernel nicht nachvollziehbar?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Welcher Prozess benutzt das Modul

Beitrag von gms » 19.10.2010 22:38:10

Kermit24 hat geschrieben:
Achja. Bei einem lsmod steht in der Spalte "User by" eine 1, sonst nichts. Bei anderen Modulen werden hinter der Zahl noch weitere Module aufgelistet.
ein Modul kann auch von Treibern verwendet werden, die statisch in den Kernel gelinkt wurden. z.B der sysfs Treiber referenziert jedes geladene Modul ( das wird allerdings bei der Ausgabe von lsmod bzw /proc/modules und /sys/modules/*/refcnt berücksichtigt und abgezogen )

Es kommt halt dann auf das jeweilige Modul drauf an, welche Aktionen nötig sind, damit das Modul entladen werden kann.

z.B beim ipt_LOG Modul müssen die entsprechenden iptables-Regeln gelöscht werden
Kermit24 hat geschrieben:lsof zeigt nur auf welche Datei/Gerät ein Prozess zugreift, aber keine Zuordnung zwischen Modulen und Prozessen. Ist so eine Zuordnung im Kernel nicht nachvollziehbar?
Prozesse sind hier nicht relevant ( Prozesse verwenden ( in diesem Sinn, also auf das "Used by" bezogen ) keine Module )

Gruß
gms

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Welcher Prozess benutzt das Modul

Beitrag von Kermit24 » 19.10.2010 23:20:04

gms hat geschrieben: ein Modul kann auch von Treibern verwendet werden, die statisch in den Kernel gelinkt wurden. z.B der sysfs Treiber referenziert jedes geladene Modul ( das wird allerdings bei der Ausgabe von lsmod bzw /proc/modules und /sys/modules/*/refcnt berücksichtigt und abgezogen )
Ok, verständlich. Mein Problem ist konkret, dass z.B. mein Soundchip plötzlich nicht mehr funktioniert. Es gibt keine Fehlermeldung vom Kernel und Musikstücke scheinen auch fehlerfrei abgespielt zu werden. Nur ich höre nichts mehr (an der Lautstärke liegt es nicht). Wenn ich das Modul entlade und neulade klappt es wieder. Ähnlich verhält es sich auch mit der Wifi-Karte auf meinem Netbook.
Angenommen ich baue einen Treiber nicht als Modul, sondern statisch in den Kernel mit ein: Hätte ich dann eigentlich überhaupt keine Chance mehr die Treiber wieder zu "Reinitialisieren", als den kompletten Kernel neuzustarten (sprich Systemneustart)?

Es kommt halt dann auf das jeweilige Modul drauf an, welche Aktionen nötig sind, damit das Modul entladen werden kann.

z.B beim ipt_LOG Modul müssen die entsprechenden iptables-Regeln gelöscht werden
ok, aber die iptables werden ja eh kernelintern abgearbeitet. Dazu muss ja kein weiterer Prozess laufen. Aber ich verstehe was Du meinst.
Seltsam ist nur, dass sobald ich meinen Benutzer nur auslogge (dazu wird X11 dank gdm nicht mal beendet, aber viele andere Prozesse die in der Sitzung des Users liefen), ich auf einer root-Konsole dann ohne Probleme das Modul wieder entladen kann. Deshalb ging ich davon aus, dass irgendein Prozess des Benutzers das Modul "blockiert".
Dann werde ich, wenn der Fehler demnächst noch mal auftritt, wohl oder übel die Prozesse des Benutzers auf gut Glück der Reihe nach killen und so mühsam suchen, an welchen es denn gelegen hat. Ich habe nämlich keine Lust, jedesmal den Benutzer komplett ab- und anzumelden.
Prozesse sind hier nicht relevant ( Prozesse verwenden ( in diesem Sinn, also auf das "Used by" bezogen ) keine Module )
Ok, gut (bzw. schlecht) zu wissen. :(
Trotzdem vielen Dank für die Klärung.

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Welcher Prozess benutzt das Modul

Beitrag von Danielx » 19.10.2010 23:38:18

Hm, du könntest auch mal unter /sys/module/*/holders/ nachsehen, vielleicht steht da etwas.

Gruß,
Daniel

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Welcher Prozess benutzt das Modul

Beitrag von catdog2 » 20.10.2010 01:36:30

Natürlich können auch Prozesse die dateien in /dev offen halten dazu führen, dass das modul nicht entladen werden kann. Bei sound lässt sich das so rausfinden:

Code: Alles auswählen

lsof /dev/snd/*
Hätte ich dann eigentlich überhaupt keine Chance mehr die Treiber wieder zu "Reinitialisieren", als den kompletten Kernel neuzustarten (sprich Systemneustart)?
Auf jeden Fall schwieriger. Zumindest für PCI devices gäbs noch bestimmte sachen mit denen man so einen effekt möglicherweise erzielen könnte: http://www.mjmwired.net/kernel/Document ... fs-bus-pci

So generell zu deinen Problemen: Vllt solltest du angenommen du benutzt einen älteren kernel mal einen neueren Versuchen um deine Probleme zu lösen. Vllt hilft auch eine von diesen optionen http://www.mjmwired.net/kernel/Document ... s.txt#1919 . Jetzt einfach mal so in den Raum gestellt.
Was mir zum sound noch einfällt ist, dass alsa manchmal blockiert (oder zumindest war das früher so), wenn eine andere Anwendung die OSS Emulation nutzt. Vllt also auch mal /dev/dsp mit lsof checken.
Unix is user-friendly; it's just picky about who its friends are.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Welcher Prozess benutzt das Modul

Beitrag von gms » 20.10.2010 09:13:16

Kermit24 hat geschrieben: Seltsam ist nur, dass sobald ich meinen Benutzer nur auslogge (dazu wird X11 dank gdm nicht mal beendet, aber viele andere Prozesse die in der Sitzung des Users liefen), ich auf einer root-Konsole dann ohne Probleme das Modul wieder entladen kann.
das "Used By" repräsentiert immer eine direkte Referenz im Kernelspace ( Modul oder statisch gelinkter Treiber ) auf das entsprechende Modul. Durch den Zugriff auf vom Kernel zur Verfügung gestellte Resourcen, kann dieser Zähler aber indirekt erhöht werden.
Kermit24 hat geschrieben:lsof zeigt nur auf welche Datei/Gerät ein Prozess zugreift, aber keine Zuordnung zwischen Modulen und Prozessen. Ist so eine Zuordnung im Kernel nicht nachvollziehbar?
In deinem Fall öffnet ein Prozeß einen Filehandle auf eine Gerätedatei. Die Gerätedatei ist wiederum einem Device und dieses wiederum einem Treiber/Modul zugeordnet.
Praktisch kannst du daher, über das erwähnte lsof, die Zuordnung Prozeß zu Gerätedatei und so wiederum zum entsprechenden Modul herstellen, theoretisch gibt es diese Zuorndung jedoch nur mehr über den Filehandle ( die Gerätedatei muß nicht mehr existieren, bzw muß die geöffnete Gerätedatei auch nicht umbedingt in /dev liegen ).

Gruß
gms

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Welcher Prozess benutzt das Modul

Beitrag von Kermit24 » 20.10.2010 10:10:54

gms hat geschrieben: In deinem Fall öffnet ein Prozeß einen Filehandle auf eine Gerätedatei. Die Gerätedatei ist wiederum einem Device und dieses wiederum einem Treiber/Modul zugeordnet.
Praktisch kannst du daher, über das erwähnte lsof, die Zuordnung Prozeß zu Gerätedatei und so wiederum zum entsprechenden Modul herstellen, theoretisch gibt es diese Zuorndung jedoch nur mehr über den Filehandle ( die Gerätedatei muß nicht mehr existieren, bzw muß die geöffnete Gerätedatei auch nicht umbedingt in /dev liegen ).
So einfach ist es leider nicht. Das erste, was ich getan habe, war mit lsof nach /dev/dsp zu suchen (mit grep). Erfolglos. Dann habe ich nur nach /dev/ geschaut. Aber ich kann mich nicht erinneren irgendwas mit /dev/snd/* gesehen zu haben.

Antworten