| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
killerhippy

Anmeldungsdatum: 19.05.2000 Beiträge: 529
|
Verfasst am: 26. Jan 2011 3:29 Titel: deamon für usb |
|
|
Hi,
welche systemschonende Programmierung kann mir hier jemand empfehlen für einen deamon, der folgendes leistet:
- Keine Aktionen bis ein bestimmtes Gerät am USB Bus angeschlossen ist.
dbus, hal, glib-2-0, udev?
Als C Neuling blicke ich da noch nicht durch, was ich nehmen sollte, weil ich nicht beurteilen kann, was am besten wäre. Ausprobieren konnte ich bisher nur das udev Beispiel udev_example.c von http://www.signal11.us/oss/udev/
Beispielprogramme der anderen Kandiaten habe ich nicht kompilieren können und vor allem steige ich da nicht durch, weil ich keine weiteren Beispielcode finden konnte und ein Referenz Handbuch ist mir ein Buch mit sieben Siegeln _________________ Es gibt keine dumme Fragen!
Killerhippy |
|
| |
|
|
ElBlues
Anmeldungsdatum: 25.03.2008 Beiträge: 127
|
|
| |
|
|
Janka

Anmeldungsdatum: 11.02.2006 Beiträge: 3269
|
Verfasst am: 26. Jan 2011 13:26 Titel: |
|
|
Für Dbus brauchst du beides. Udev-Skripte, um die dbus-Events auszulösen, und eine GUI-Applikation, die diese Events dann empfängt. Du kannst aber existierende Udev-Skripte benutzen, um die Events erzeugen zu lassen, wenn dich die Applikations-Seite interessiert oder halt nur das Udev-Skript machen, wenn du keine neue Applikation entwickeln, sondern eine existierende Applikation für neue Events nutzen willst. Oder du lässt dbus aus und arbeitest nur mit udev.
Für Gnome gilt das entsprechend. Und HAL stirbt. Darauf solltest du also nicht setzen.
Janka _________________ Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie. |
|
| |
|
|
killerhippy

Anmeldungsdatum: 19.05.2000 Beiträge: 529
|
Verfasst am: 26. Jan 2011 22:56 Titel: |
|
|
Danke für die Antworten. Das Udev Beispiel konnte ich in meinen deamon soweit um- und einbauen, dass es funktioniert. Jedoch stört mich daran:
- Systemload steigt, der Prozess verbraucht viel CPU Zeit schon beim Warten darauf, dass etwas passiert.
Blöde Frage vielleicht, von dbus hatte ich mir eigentlich erwartet, ich sage dem Bescheid, worauf er achten soll und dann schickt er mir ein Signal, wenn das eintritt.
Wenn das nicht so funktioniert, kann ich ja besser 1 mal in der Sekunde oder so /proc/bus/usb/devices nach meinem Gerät greppen. _________________ Es gibt keine dumme Fragen!
Killerhippy |
|
| |
|
|
Janka

Anmeldungsdatum: 11.02.2006 Beiträge: 3269
|
Verfasst am: 26. Jan 2011 23:23 Titel: |
|
|
| killerhippy hat folgendes geschrieben:: | Danke für die Antworten. Das Udev Beispiel konnte ich in meinen deamon soweit um- und einbauen, dass es funktioniert. Jedoch stört mich daran:
- Systemload steigt, der Prozess verbraucht viel CPU Zeit schon beim Warten darauf, dass etwas passiert.
|
Das sollte nicht so sein und spricht dafür, dass das Beispiel einen Fehler enthält oder veraltet ist. Link?
Janka _________________ Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie. |
|
| |
|
|
killerhippy

Anmeldungsdatum: 19.05.2000 Beiträge: 529
|
Verfasst am: 27. Jan 2011 3:18 Titel: |
|
|
http://www.signal11.us/oss/udev/
Unten auf der Seite habe ich
Set up a monitor to monitor hidraw devices
angepasst auf usb u. usbdevice und in meinen deamon eingebaut, das läuft da also in einer Endlos Schleife.
Funktioniert aber man darf z B. keine Sleeps einbauen sonst wird das Entfernen des devices nicht mehr bemerkt.
Inzwischen habe ich ein C Grep von
http://page.mi.fu-berlin.de/kijewski/solutions/ti3/atoi,grep,wc,cat.html
testweise eingebaut, das funktioniert soweit und ich bin (erstmal) begeistert. Im top ist es gar nicht zu sehen:
| Code: | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2837 sascha 20 0 10280 784 648 S 0 0.0 0:00.57 spf87hd |
Von der cmd line:
| Code: | SPF87H in Monitor Mode found
claimed device
Send_cmd finished.
SPF-87H device gone
SPF87H in Monitor Mode found
claimed device
Send_cmd finished.
SPF-87H device gone
SPF87H in Monitor Mode found
Error opening device handle
SPF87H in Monitor Mode found
claimed device
Send_cmd finished.
SPF-87H device gone
|
Wiederholtes aktivieren u. ausschalten. Läuft
Jedenfalls, solange das Programm auf dem terminal (foreground) läuft. Wenn ich es echt als deamon starte, bekomme ich einen Fehler, sobald es aktiv wird:
| Code: | Jan 27 03:36:29 localhost kernel: spf87hd[27606]: segfault at 10 ip 0000003d41009334 sp 00007fff3b326ba0 error 4 in libpthread-2.12.2.so[3d41000000+17000]
Jan 27 03:36:29 localhost kernel: spf87hd[27606]: segfault at 10 ip 0000003d41009334 sp 00007fff3b326ba0 error 4 in libpthread-2.12.2.so[3d41000000+17000]
|
Muss ich da beim komilieren noch irgendwie gegen pthread linken?
Mein Makefile sieht so aus:
| Code: | CC = gcc
CFLAGS = -Wall -O2 -g
LDFLAGS = -lusb-1.0
OBJ=spf87hd
all: $(OBJ)
spf87hd: spf87hd.o
${CC} ${CFLAGS} ${LDFLAGS} spf87hd.o -o spf87hd
spf87hd.o: spf87hd.c
${CC} ${CFLAGS} ${LDFLAGS} -c spf87hd.c
clean:
rm -rf *.o spf87hd
|
_________________ Es gibt keine dumme Fragen!
Killerhippy |
|
| |
|
|
Janka

Anmeldungsdatum: 11.02.2006 Beiträge: 3269
|
Verfasst am: 27. Jan 2011 12:58 Titel: |
|
|
| killerhippy hat folgendes geschrieben:: |
Jedenfalls, solange das Programm auf dem terminal (foreground) läuft. Wenn ich es echt als deamon starte,
|
Ich vermute, dass in dem Programm die Rückgabewerte einer oder mehrerer Funktionen nicht auf den Fehlerzustand abgefragt werden und dann mit NULL weitergearbeitet wird -- was natürlich segfaulten wird.
Wie startest du es genau? Was genau ist dann anders als bei direktem start? So kommst du vermutlich des Stelle auf die Schliche, wo die Fehlerbehandlung fehlt.
Janka _________________ Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie. |
|
| |
|
|
killerhippy

Anmeldungsdatum: 19.05.2000 Beiträge: 529
|
Verfasst am: 27. Jan 2011 23:15 Titel: |
|
|
Fast genau ins Schwarze getroffen.
Ich hatte einen Fehler gemacht, die Initialisierung vom libusb war durch ein Überbleibsel vergangener Debug Ausgaben nur in Nicht-Deamon Mode gemacht worden. Korrigiert, läuft:
| Code: | Jan 27 23:10:20 localhost spf87hd[9561]: spf87hd started
Jan 27 23:10:36 localhost kernel: usb 1-5: new high speed USB device using ehci_hcd and address 81
Jan 27 23:10:36 localhost kernel: usb 1-5: new high speed USB device using ehci_hcd and address 81
Jan 27 23:10:36 localhost spf87hd[9561]: SPF87H in Monitor Mode found
Jan 27 23:10:36 localhost spf87hd[9561]: claimed device
Jan 27 23:10:36 localhost spf87hd[9561]: Send_cmd finished.
Jan 27 23:10:58 localhost kernel: usb 1-5: USB disconnect, address 81
Jan 27 23:10:58 localhost kernel: usb 1-5: USB disconnect, address 81
Jan 27 23:10:58 localhost spf87hd[9561]: SPF-87H device gone
|
Danke! Jetzt noch die letzten Funktionen einbauen... _________________ Es gibt keine dumme Fragen!
Killerhippy |
|
| |
|
|
killerhippy

Anmeldungsdatum: 19.05.2000 Beiträge: 529
|
|
| |
|
|
killerhippy

Anmeldungsdatum: 19.05.2000 Beiträge: 529
|
|
| |
|
|
|