2010-06-12 8 views
6

Ich lerne Programmierung in Embedded-Systemen mit Linux als meine Hauptplattform. Und ich möchte einen Device Event Management Service erstellen. Dieser Dienst ist eine Benutzerbereichsanwendung/ein Daemon, der erkennt, ob ein verbundenes Hardwaremodul ein Ereignis ausgelöst hat. Aber mein Problem ist, ich weiß nicht, wo ich anfangen soll.Netlink User-Space und Kernel-Space-Kommunikation

Ich lese über Netlink-Implementierung für Userspace-Kernelspace-Kommunikation und es scheint, es ist eine gute Idee, aber nicht sicher, ob es die beste Lösung ist. Aber ich lese, dass der UDEV-Gerätemanager Netlink verwendet, um ein "Ereignis" aus dem Kernel-Bereich zu warten, aber es ist mir nicht klar, wie das geht.

Ich habe gelesen, über das Abrufen von sysfs, aber es scheint, es ist keine gute Idee, Dateisystem abzufragen.

Was denken Sie über die Implementierung, die ich in meinem Service verwenden sollte? Soll ich netlink (hard/no clue how) verwenden oder nur die sysfs abfragen (nicht sicher, ob es funktioniert)?

Danke

+0

Sie können uns auch inotify, um benachrichtigt werden, wenn ein Verzeichnis in Frage in sysfs statt Abfragen ändert. – MikeK

Antwort

1

Ja, Polling ist schlecht beraten. Diese Ressourcen: LJ-Artikel zu Netlink, "Verstehen und Programmieren mit Netlink-Sockets", machen es anscheinend nicht so schwer, netlink zu machen. Hier ist ein Beispiel für Netlink-Sockets in Python.

udevtrigger ist ein großartiges Dienstprogramm für die Reaktion auf Änderungen von udev.

http://www.linuxjournal.com/article/7356

http://smacked.org/docs/netlink.pdf

http://guichaz.free.fr/misc/iotop.py

http://manpages.ubuntu.com/manpages/gutsy/man8/udevtrigger.8.html

1

Wenn alles, was Sie tun, ist für ein Ereignis warten Sie sysfs verwenden können, die viel einfacher als netlink sein wird. Ein Beispiel ist die Edge-Datei des GPIO-Systems.

Verwandte Themen