Kartenleser Reiner SCT pinpad + Kernel 2.6

Hast Du Probleme mit Hardware, die durch die anderen Foren nicht abgedeckt werden? Schau auch in den "Tipps und Tricks"-Bereich.
shh
Beiträge: 140
Registriert: 16.06.2002 14:29:44

Beitrag von shh » 23.06.2004 18:27:08

So....
Haralds patch für die usb-serial.c scheint endlich Besserung zu bringen bzgl. der oopses und dem Einschlafen vom ohci_hcd nach mehrerem An/Abstecken.

Zusätzlich hat Harald Welte noch einiges an den Aufrufen in der cyberjack.c geändert.
Leider wird in seinen originalen patches der lokale Schreib-Buffer wieder eingeführt, war hier an meinen Rechnern Fehler in Verbindung mit dem cjtest Programm der Reiner-Treibersuite bringt. Ich habe den Teil mal bis auf weiteres revidiert, bzw so gelassen wie er im aktuellen Kernel ist.
Ob jetzt cjtest nur falsch programmiert ist (bzgl neuerer Kernelversionen) und ob der lokale Buffer wirklich nötig ist, weiss ich noch nicht. Ohne Buffer funktioniert's aber - zumindest bei mir.

Kleine Anleitung für Kernel 2.6.7:
1. Nach /usr/src/linux-2.6.7/drivers/usb/serial/ gehen.
2.

Code: Alles auswählen

cat usb-serial.patch | patch -b
ausführen.
3.

Code: Alles auswählen

cat cyberjack.patch | patch -b
ausführen.
4. Nach /usr/src/linux-2.6.7/ gehen und

Code: Alles auswählen

make modules
ausführen.
5. Die neuen Module aus /usr/src/linux-2.6.7/drivers/usb/serial/ ins Modull-Verzeichnis /lib/modules/.....) kopieren.
6. Neu starten, oder die Module manuell laden.

Aktuelle patches für Kernel 2.6.7:
Patch für /usr/src/linux-2.6.7/drivers/usb/serial/cyberjack.c
Abspeichern als cyberjack.patch oder hier runterladen: cyberjack.patch

Code: Alles auswählen

--- cyberjack.c.orig	2004-06-24 12:01:54.000000000 +0200
+++ cyberjack.c	2004-06-23 14:06:03.000000000 +0200
@@ -49,7 +49,7 @@
 /*
  * Version Information
  */
-#define DRIVER_VERSION "v1.0"
+#define DRIVER_VERSION "v1.01"
 #define DRIVER_AUTHOR "Matthias Bruestle"
 #define DRIVER_DESC "REINER SCT cyberJack pinpad/e-com USB Chipcard Reader Driver"
 
@@ -116,6 +116,7 @@ struct cyberjack_private {
 static int cyberjack_startup (struct usb_serial *serial)
 {
 	struct cyberjack_private *priv;
+	int i;
 
 	dbg("%s", __FUNCTION__);
 
@@ -133,6 +134,16 @@ static int cyberjack_startup (struct usb
 
 	init_waitqueue_head(&serial->port[0]->write_wait);
 
+	for (i = 0; i < serial->num_ports; ++i) {
+		int result;
+		serial->port[i]->interrupt_in_urb->dev = serial->dev;
+		result = usb_submit_urb(serial->port[i]->interrupt_in_urb, 
+					GFP_KERNEL);
+		if (result)
+			err(" usb_submit_urb(read int) failed");
+		dbg("%s - usb_submit_urb(int urb)", __FUNCTION__);
+	}
+
 	return( 0 );
 }
 
@@ -143,6 +154,7 @@ static void cyberjack_shutdown (struct u
 	dbg("%s", __FUNCTION__);
 
 	for (i=0; i < serial->num_ports; ++i) {
+		usb_unlink_urb (serial->port[i]->interrupt_in_urb);
 		/* My special items, the standard routines free my urbs */
 		kfree(usb_get_serial_port_data(serial->port[i]));
 		usb_set_serial_port_data(serial->port[i], NULL);
@@ -173,17 +185,6 @@ static int  cyberjack_open (struct usb_s
 	priv->wrsent = 0;
 	spin_unlock_irqrestore(&priv->lock, flags);
 
-	/* shutdown any bulk reads that might be going on */
-	usb_unlink_urb (port->write_urb);
-	usb_unlink_urb (port->read_urb);
-	usb_unlink_urb (port->interrupt_in_urb);
-
-	port->interrupt_in_urb->dev = port->serial->dev;
-	result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
-	if (result)
-		err(" usb_submit_urb(read int) failed");
-	dbg("%s - usb_submit_urb(int urb)", __FUNCTION__);
-
 	return result;
 }
 
@@ -195,11 +196,6 @@ static void cyberjack_close (struct usb_
 		/* shutdown any bulk reads that might be going on */
 		usb_unlink_urb (port->write_urb);
 		usb_unlink_urb (port->read_urb);
-		usb_unlink_urb (port->interrupt_in_urb);
-		dbg("%s - usb_clear_halt", __FUNCTION__ );
-		usb_clear_halt(port->serial->dev, port->write_urb->pipe);
-		usb_clear_halt(port->serial->dev, port->read_urb->pipe);
-		usb_clear_halt(port->serial->dev, port->interrupt_in_urb->pipe);
 	}
 }
 
@@ -383,6 +379,10 @@ static void cyberjack_read_bulk_callback
 	usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
 
 	tty = port->tty;
+	if (!tty) {
+		dbg("%s - ignoring since device not open\n", __FUNCTION__);
+		return;
+	}
 	if (urb->actual_length) {
 		for (i = 0; i < urb->actual_length ; ++i) {
 			/* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */


Patch für /usr/src/linux-2.6.7/drivers/usb/serial/usb-serial.c
Abspeichern als usb-serial.patch oder hier runterladen: usb-serial.patch

Code: Alles auswählen

--- usb-serial.c.orig	2004-06-24 12:02:20.000000000 +0200
+++ usb-serial.c	2004-06-23 13:40:23.000000000 +0200
@@ -1393,7 +1393,7 @@ void usb_serial_deregister(struct usb_se
 		serial = serial_table[i];
 		if ((serial != NULL) && (serial->type == device)) {
 			usb_driver_release_interface (&usb_serial_driver, serial->interface);
-			usb_serial_disconnect (serial->interface);
+//			usb_serial_disconnect (serial->interface);
 		}
 	}
 
BITTE MELDEN, wenn die patches bei euch immer noch nicht helfen!
Zuletzt geändert von shh am 24.06.2004 12:50:09, insgesamt 4-mal geändert.

Zoolook
Beiträge: 2
Registriert: 24.06.2004 08:15:26

Beitrag von Zoolook » 24.06.2004 08:53:27

shh hat geschrieben: BITTE MELDEN, wenn die patches bei euch immer noch nicht helfen!
Hi,

bin neu hier, und habe unter Gentoo (so bin ich auch auf diesen Thread gestoßen, aus einem Verweis aus dem Gentoo-Forum, durch rblock) auch das Problem, meinen neuen Cyberjack Pinpad USB (erst seit 2 Tagen von der Sparkasse geholt) mit einem 2.6.7-er Kernel nicht am Laufen bekommen zu können (Reader ist also nagelneu und funzt unter Windows).
Ich kann diese beiden letzten Patches nicht einspielen. Erstens glaube ich richtig erkannt zu haben, daß sie genau mit umgetauschten Namen gespeichert werden sollten, aber dann funktioniert weder

Code: Alles auswählen

cat usb-serial.patch | patch -bp1
noch

Code: Alles auswählen

patch -p0 < usb-serial.patch
(bei allen beiden Dateien). Beide Patches werden rejected. Wenn ich den Text aus Konqueror paste, haben alle Zeilen angefangen von der 2. noch ein Leerzeichen davor, aus Firefox nicht, aber trotzdem beschwert sich dann "patch" daß

Code: Alles auswählen

root@blues serial # root@blues serial # patch -p0 < /usb-serial.patch
patching file usb-serial.c
patch unexpectedly ends in middle of line
Hunk #1 FAILED at 1393.
1 out of 1 hunk FAILED -- saving rejects to file usb-serial.c.rej
und auch wenn ich das dann versuche zu korrigieren, bleibt's ohne Erfolg. Und bei usb-serial kann man ja noch von Hand patchen, aber cyberjack.c würde ich nun nicht von hand verhunzen...

Mache ich etwas falsch? Noch zur Info, ich habe mehrmals die originalen Dateien cyberjack.c und usb-serial.c aus einem frisch runtergeladenen vanilla-Kernel 2.6.7 in meinem aktuellen Kernel-Quellverzeichnis überschrieben.

Würdest Du bitte die Patches als komprimierte Dateien irgendwo zum Download bereitstellen? Oder ich schicke Dir meine eMail-Addresse über die PN-Funktion dieses Forums, und dann könntest Du mir die Dateien als Anhang schicken..?

Schönen Gruß,
Lucian

shh
Beiträge: 140
Registriert: 16.06.2002 14:29:44

Beitrag von shh » 24.06.2004 12:40:20

> Erstens glaube ich richtig erkannt zu haben, daß sie genau mit umgetauschten Namen gespeichert werden sollten

Stimmt! Habe ich natürlich vertauscht. :roll:
Hab's gerade geändert.

Ich habe auch die anderen Patch-"Zitate" nochmal generiert und geändert.
Vielleicht geht's jetzt. Hmm, es scheint wirklich nicht zu funktionieren mit der Option -p1...
Einfach keine Option oder -b für 'n Backup an patch anhängen, dann müsste es klappen.
zB:

Code: Alles auswählen

cat usb-serial.patch | patch -b
[Grübel]Wie macht man ein diff, was dann mit dem üblichen patch -p1 funktioniert?
Ich habe zum diff'en diff -up cyberjack.c{.orig,} benutzt, wie in der Kernel-doku angegeben.

EDIT:
Cyberjack patches:
1. cyberjack.patch
2. usb-serial.patch

EDIT2:
Die Einschlaf-Probleme des ohci_hcd bestehen offenbar immernoch.
Immerhin, gibt's keine oopses mehr und die Allgemeinheit hat wenigstens ansatzweise Funktion.
Der uhci_hcd scheint aber stabiler zu laufen. Bis jetzt habe ich damit noch keine Probleme gehabt. :roll:

Zoolook
Beiträge: 2
Registriert: 24.06.2004 08:15:26

Beitrag von Zoolook » 25.06.2004 07:57:11

Hallo shh,
danke, Deine Patches konnte ich nun einspielen und es funktioniert! Zwar warte ich derzeit noch auf die PIN meiner neunen HBCI-Karte von der Bank, um dann mit dem Banking unter Linux loszulegen (will von der Windows T-Online-Banking-SW weg), aber die Reiner-SCT-tools scheinen zu funktionieren, auch kCardSetup und kMedCard.
Ich hatte aber noch folgendes Problem: da ich unter Gentoo devfs einsetze, fehlte bei mir ein symlink /dev/ttyUSB0 auf /dev/usb/tts/0 und alles funktionierte erst nachdem ich den manuell erstellt habe, hoffentlich ist er beim nächsten Reboot noch da ;-).
Schönen Gruß,
Lucian

Benutzeravatar
rblock
Beiträge: 13
Registriert: 26.03.2004 18:19:24
Wohnort: Usingen
Kontaktdaten:

Beitrag von rblock » 25.06.2004 10:41:35

Zoolook hat geschrieben:Ich hatte aber noch folgendes Problem: da ich unter Gentoo devfs einsetze, fehlte bei mir ein symlink /dev/ttyUSB0 auf /dev/usb/tts/0 und alles funktionierte erst nachdem ich den manuell erstellt habe, hoffentlich ist er beim nächsten Reboot noch da ;-).
Da devfs als obsolet gekennzeichnet ist, solltest Du auf udev umsteigen. Dies ist mit dieser Gentoo Anleitung ganz einfach. Zumindest ging es bei mir problemlos. ;)

Und unter /etc/udev/ findest Du dann eine udev.conf für die generellen Einstellunge und dann in den Unterverzeichnissen rules.d und permissions.d die Konfigurationsdateien für die entsprechenden Einstellungen. :)

HTH

Teilsonnige Grüße
Reiner

--
"Was immer du tun kannst oder erträumst zu können, beginne es jetzt."
von: Johann Wolfgang von Goethe (1749-1832)

Reiner Block
http://www.bisoft.de

Antworten