Wie fließen USB-Ereignisse vom Kernel-Space zum User-Space? Wenn ich ein USB-Laufwerk anschließe, wird auf meinem Desktop ein Popup angezeigt. In welcher Reihenfolge wird das neue USB-Laufwerk erkannt, gemountet und das Popup angezeigt?
Dies geschieht udev
auf modernen Linux-Systemen. Der udev
Dämon mit dem System gestartet sucht in /etc/udev/rules.d
und /lib/udev/rules.d
und Anpassungsregeln für die Kernel - Ereignisse ausgeführt werden . Das Einstecken eines USB-Laufwerks löst ein Ereignis aus, udev
sucht nach einer passenden Regel und führt diese aus.
Die Regeln selbst bestimmen, was Ihr System tut. In den letzten Jahren udev
hat HAL mitgeteilt, dass Anwendungen über DBUS alarmiert werden. Dieser Ansatz ist zugunsten einer vereinheitlichten udev
Lösung hinfällig. Ich gehe davon aus, dass die udevd
Kommunikation dbus
direkt oder über dbus-send erfolgen wird .
Sie können die Aktivitäten von udev
via überwachen udevadm monitor
.
Ich bin noch nicht ganz sicher, also nimm es mit einem Körnchen Salz und mehr Nachforschungen.
Es beginnt mit dem Kernel-Hotplug-Subsystem. Nachdem ein Gerät eingerichtet wurde, ruft es entweder echo hotplug_handler > /proc/sys/kernel/hotplug
das User-Space- Programm auf, das für die Verarbeitung von Hotplug-Ereignissen eingerichtet wurde (sofern eines von festgelegt wurde ), oder sendet ein Datenpaket über den Netlink-Socket kobject_uevent. Wenn der Kernel den Hotplug-Handler startet, werden einige Umgebungsvariablen eingerichtet. Wenn der Kernel ein Datenpaket sendet, enthält es Schlüssel = Wert-Paare. Wenn Sie möchten, können Sie ein Skript einrichten, das nur die Umgebung protokolliert und als Handler konfiguriert (natürlich nicht auf Ihrem Produktionssystem - ein Test-Setup).
Normalerweise wird udev als Handler eingerichtet, und es werden verschiedene Regeln für die Behandlung von Ereignissen festgelegt. Von dort aus kann es andere Programme starten, die andere Aufgaben ausführen (z. B. dbus-Nachrichten ausgeben). Diese udev-Regeln hängen stark von der jeweiligen Interessensverteilung ab.
In diesem Thread gibt es viele Informationen, in denen jemand versucht, eine Dokumentation zu schreiben. Beachten Sie, dass die erste Nachricht nicht korrekt ist. weiter lesen.
udev
lauschen auf einem Netlink-Socket nach Ereignissen. (Der alte Weg hatte Serialisierungs- / Parallelitätsprobleme.)