Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 16. Nov 2018 6:30

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: deamon für usb
BeitragVerfasst: 26. Jan 2011 3:29 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 26. Jan 2011 12:26 
Offline

Registriert: 25. Mär 2008 12:50
Beiträge: 127
Schau' mal da: http://www.scaps.com/products/uscd.php

_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 26. Jan 2011 13:26 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 26. Jan 2011 22:56 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 26. Jan 2011 23:23 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27. Jan 2011 3:18 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
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/so ... c,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 :D

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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27. Jan 2011 12:58 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27. Jan 2011 23:15 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 02. Feb 2011 13:58 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
Ich habe fertig. Ist verfügbar auf http://www.killerhippy.de/archives/2011 ... demon.html
Wer mal gucken will...
Oder selbst dafür Verwendung hätte...

_________________
Es gibt keine dumme Fragen!

Killerhippy


Nach oben
   
 Betreff des Beitrags: Update auf v0.0.2
BeitragVerfasst: 27. Feb 2011 15:16 
Offline
Benutzeravatar

Registriert: 19. Mai 2000 19:36
Beiträge: 529
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 ... -v002.html

_________________
Es gibt keine dumme Fragen!

Killerhippy


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de