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 = 0

    Das 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?


Anmelden zum Antworten