Antworten:
Dies geschieht udevauf modernen Linux-Systemen. Der udevDämon mit dem System gestartet sucht in /etc/udev/rules.dund /lib/udev/rules.dund Anpassungsregeln für die Kernel - Ereignisse ausgeführt werden . Das Einstecken eines USB-Laufwerks löst ein Ereignis aus, udevsucht nach einer passenden Regel und führt diese aus.
Die Regeln selbst bestimmen, was Ihr System tut. In den letzten Jahren udevhat HAL mitgeteilt, dass Anwendungen über DBUS alarmiert werden. Dieser Ansatz ist zugunsten einer vereinheitlichten udevLösung hinfällig. Ich gehe davon aus, dass die udevdKommunikation dbusdirekt oder über dbus-send erfolgen wird .
Sie können die Aktivitäten von udevvia ü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/hotplugdas 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.
udevlauschen auf einem Netlink-Socket nach Ereignissen. (Der alte Weg hatte Serialisierungs- / Parallelitätsprobleme.)