udev - ändere das Ereignis von udev_device_get_action

961
amitam

Ich überwache die Ereignisse aller mit dem Host verbundenen Geräte. Linux verfügt über den udev-Dämon, der alle gerätespezifischen Ereignisse überwacht, z. B. Online, Offline, Hinzufügen, Entfernen und Ändern .

Ich verwende eine von linux udev_device_get_action bereitgestellte Funktion, mit der die Ereignisse / Aktionen auf diesem Gerät abgerufen werden.

Auf meinem Computer werden ständig Änderungsereignisse von dieser Funktion in der Variablen meines Codes zurückgegeben. [Gibt den Zeichenzeiger zurück]

Ich habe den Linux-Code auf die Funktion udev_device_get_action überprüft. Er gibt nur die Aktion aus der udev-Gerätestruktur zurück.

UDEV_EXPORT const char *udev_device_get_action(struct udev_device *udev_device) { if (udev_device == NULL) return NULL; return udev_device->action; } 

Wie kann ich wissen, wo genau diese Änderungsereignisse herkommen?

0

1 Antwort auf die Frage

1
grawity

uevents werden vom Kernel selbst (dh von Kerneltreibern) generiert.

udev erhält sie über  netlink (7) mit der Familie NETLINK_KOBJECT_UEVENT, Gruppe 1. Anschließend werden verschiedene zusätzliche Felder aus rules & hwdb hinzugefügt und die erweiterten Uevents an kobject-uevent-Gruppe 2 gesendet, wo sie schließlich von libudev empfangen werden.

Es ist möglich, Uevents manuell auszulösen (z. B. durch Schreiben von "Hinzufügen" oder "Ändern" in die /sys/…/ueventDatei eines bestimmten Geräts ), dies wird jedoch normalerweise nicht durchgeführt, außer wenn "udevadm trigger" verwendet wird.

Aber was bedeutet CHANGE_EVENTS, was ich viel von udevd bekomme ..? In meinem Treiber habe ich mich um ADD, REMOVE, ONLINE, OFFLINE-Ereignisse von UDEV für Geräte gekümmert, aber ich bekomme keinen Zweck, sondern eher ein Verhalten hinter dem Hören von CHANGE_EVENTS. Was ist die Ursache dafür und was würde dies für jeden Blocktreiber bedeuten? amitam vor 8 Jahren 0