Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
deamon für usb

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst 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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

ElBlues



Anmeldungsdatum: 25.03.2008
Beiträge: 127

BeitragVerfasst am: 26. Jan 2011 12:26   Titel:

Schau' mal da: http://www.scaps.com/products/uscd.php
_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst 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.
 
Benutzer-Profile anzeigen Private Nachricht senden

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst 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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst 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.
 
Benutzer-Profile anzeigen Private Nachricht senden

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst 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 Very Happy

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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst 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.
 
Benutzer-Profile anzeigen Private Nachricht senden

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst 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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 02. Feb 2011 13:58   Titel:

Ich habe fertig. Ist verfügbar auf http://www.killerhippy.de/archives/2011/02/hacking-samsung-spf87h-linux-demon.html
Wer mal gucken will...
Oder selbst dafür Verwendung hätte...
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 27. Feb 2011 15:16   Titel: Update auf v0.0.2

Für moderne Systeme, auf denen proc/bus/usb/devices nicht mehr exisitiert oder schlicht nicht gemountet ist, wird jetzt unter /sys/bus/usb/devices nach dem Gerät gesucht.
http://www.killerhippy.de/archives/2011/02/hacking-samsung-spf87h-linux-demon-v002.html
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy