USBIP-Client läuft auf Picocom1 ( Kernel 2.6.25) nicht
-
Hallo,
ich habe ein Problem.
Ich habe das USBIP-Projekt für das µC-Board Picocom1 cross compiliert, der dort eingesetzte Kernel ist 2.6.25. Die Server-Seite funktioniert tadellos, leider aber nicht die Client-Seite.
Ich hab jeweils mal ein bisschen Debug-Output in den Code gepackt und das ist das Ergebnis:Ubuntu 10.10 (2.6.35-25):
- 172.16.7.196
usbip_xmit: send = 8
usbip_xmit: bufflen = 0
usbip_xmit: total = 8
usbip_xmit: recv = 8
usbip_xmit: bufflen = 0
usbip_xmit: total = 8
usbip_xmit: recv = 4
usbip_xmit: bufflen = 0
usbip_xmit: total = 4
usbip_xmit: recv = 312
usbip_xmit: bufflen = 0
usbip_xmit: total = 312
1-4.1: Cherry GmbH : My3000 Keyboard (046a:0001)
: /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.1
: (Defined at Interface level) (00/00/00)
usbip_xmit: recv = 4
usbip_xmit: bufflen = 0
usbip_xmit: total = 4
: 0 - Human Interface Device / Boot Interface Subclass / Keyboard (03/01/01)Picocom1 (Kernel 2.6.25):
Identisch, doch dann folgt das hier endlos...usbip_xmit: recv = 0
usbip_xmit: bufflen = 312
usbip_xmit: total = 0
usbip_xmit: recv = 0
usbip_xmit: bufflen = 312
usbip_xmit: total = 0Das hier ist der scheinbar "fehlerhafte" Code, obwohl meinerseits nichts verändert wurde:
static ssize_t usbip_xmit(int sockfd, void *buff, size_t bufflen, int sending) { ssize_t total = 0; if (!bufflen) return 0; do { ssize_t nbytes; if (sending){ nbytes = send(sockfd, buff, bufflen, 0); printf("usbip_xmit: send = %d\n",nbytes); } else { nbytes = recv(sockfd, buff, bufflen, MSG_WAITALL); printf("usbip_xmit: recv = %d\n",nbytes); } if (nbytes < 0) return -1; buff = (void *) ((intptr_t) buff + nbytes); bufflen -= nbytes; printf("usbip_xmit: bufflen = %d\n",bufflen); total += nbytes; printf("usbip_xmit: total = %d\n",total); } while (bufflen > 0); return total; }
Kann mir vielleicht Jemand bei Fehlerbehebung helfen?
Liegt es an der Software, liegt es am unterschiedlichen Kernel?
-
So, hab nochmal weiter gesucht und hab rausgefunden, das ein Problem ist, das auf dem Pc und dem µC-Board, ein Wert der in der Abbruch-Bedingung einer If-Schleife unterschiedlich ist.
Am dem Pc ist der Wert 1 und auf dem µC 16777216.
Weiß Jemand auf was diese Problem deutet?
Endianess?