Zitat geschrieben von mak83
Sobald ich den Kartenleser an den USB Port anschließe, leuchten kurz die Lämpchen, der Schriftzug erscheint und das Ding geht direkt wieder aus.
Wie vermutet ist das Problem das neue Kernel-"Feature" usb autosuspend
Ich habe jetzt mal auf
Sourceforge
eine hotfix-release des Treibers gemacht (mit Paketen fuer das ebenfalls betroffende Ubuntu 7.04).
Das sollte das Problem zumindest mit Moneyplex loesen, ich muss mit noch anschauen, wie das mit Libchipcard arbeitet. Da Libchipcard ja mittels Libusb pollt, duerfte der Leser wohl entweder an bleiben oder aber immer wieder an- und ausgehen (abhaengig von den timeout-Einstellungen in der Configdatei von Libchipcard). Da werde ich also wohl mittelfristig auf libsysfs umstellen muessen.
Das Problem scheint nach ersten Tests folgendes zu sein: In /proc/bus/usb ist das Geraet ja ganz normal zu sehen, aber mit "lsusb" nicht. Der Aufruf von "lsusb" schaltet das Geraet ein (scheint das Aequivalent von usb_init() bzw. usb_find_devices() zu sein), und anschliessend versucht libusb scheinbar sofort dem Leser Informationen zu entlocken.
Der Leser braucht aber ein paar Sekunden, um aus dem Tiefschlaf aufzuwachen, und solange scheint Libusb nicht zu warten, zumindest scheint der entsprechende Dateideskriptor wohl sofort wieder geschlossen zu werden. Damit schaltet der Linux-Kernel nach 2s den Leser wieder ab (also gerade dann, als der mit der Initialiserung fertig wird).
Eine temporaere Loesung in unserem Treiber ist nun, dass einfach fuer bis zu 5s versucht wird, den Leser zu finden. Damit wird der autosuspend-Timer des Kernels immer wieder resetted, bis der Leser bereit ist und antworten kann. Damit bekommt dann Libusb seine Informationen und der Leser bleibt an (und ist vor allem auch fuer den Treiber sichtbar).
Generell muesste das wohl in Libusb gefixed werden, aber scheinbar sind die Jungs da momentan nicht so aktiv, zumindest habe ich laenger nichts mehr auf der Mailingliste gelesen...
Zumindest auf unserem Laptop mit Ubuntu7.04 geht das nun...
Gruss
Martin Preuss