User Tools

Site Tools


doc:howto:usb.iptunnel

USB over IP tunnel

USB/IP Project aims to develop a general USB device sharing system over IP network. To share USB devices between computers with their full functionality, USB/IP encapsulates "USB I/O messages" into TCP/IP payloads and transmits them between computers.

:!: This is reported to be working, but we lack a HowTo yet!

Server on OpenWrt

Since Barrier Breaker release USBIP packets are missing - there's difference in installation procedure

First install the usb kernel module and usbip server and client packages:

Attitude Adjustment:

opkg install kmod-usb-ohci usbip-server usbip-client

Barrier Breaker:

opkg install kmod-usb-ohci
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/usbip_1.1.1-2_ar71xx.ipk
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/usbip-client_1.1.1-2_ar71xx.ipk
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/usbip-server_1.1.1-2_ar71xx.ipk
(The packages are installed from AA, but kernel modules would be installed from BB automatically to match kernel ver)

Now use usbip list -l to list the local usb devices available that can be exported. In the following example a hub, usb printer, and an optical mouse are shown:

root@OpenWrt:~# usbip list -l
Local USB devices
=================
 - busid 2-1 (05e3:0608)
         2-1:1.0 -> hub

 - busid 2-1.4 (04e8:344f)
         2-1.4:1.0 -> unknown
         2-1.4:1.1 -> unknown

 - busid 2-2 (093a:2510)
         2-2:1.0 -> unknown

The information that you are looking for is 2-2, which is the BUSID for the target device (an optical mouse).
Edit /etc/rc.local and before the exit 0 add the following lines:

usbipd -D &
sleep 1
usbip bind -b 2-2

Use netstat to see if everything works:

root@OpenWrt:~# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      927/usbipd

Client side (Arch-linux PC)

Install usbip in your PC

[root@tool dani]# pacman -S usbip

Load the module for the client

[root@tool dani]# modprobe vhci_hcd

List the available remote devices at OpenWrt (server side).

[root@tool dani]# usbip list -r 192.168.1.1
Exportable USB devices
======================
 - 192.168.1.1
        2-2: Pixart Imaging, Inc. : Optical Mouse (093a:2510)
           : /sys/devices/platform/bcm63xx_ohci.0/usb2/2-2
           : (Defined at Interface level) (00/00/00)
           :  0 - Human Interface Device / Boot Interface Subclass / Mouse (03/01/02)

Attach the remote device

[root@tool dani]# usbip attach -r 192.168.1.1 -b 2-2

If all went fine now you can move the mouse on your pc, but attached to the router with OpenWrt.

Client side (Windows PC (incl. W7 x64)

Solution consists of 2 parts:

1. Install Driver

2. Start usbip tool

1. Installing a driver could be a challenge - there is a signed drivers, included in 0.200 version of tool. Unfortunately the don't work anymore. at least for Win7 x64. Look through USBIP forum to find the latest compiled driver and tool. Unfortunately the Driver is not signed and in order to install it, you have to switch off Windows drivers signature check. a)Download the working Driver and usbip tool here: http://sourceforge.net/p/usbip/discussion/418507/thread/86c5e473/

b)Disable Windows Drivers check:

    Open a command prompt as an admin and type:
    bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
    bcdedit -set TESTSIGNING ON
    NOTE: Turning off driver signing is a security risk.
    If it doesn't work, for whatever reason, you can just remove loadoptions with bcedit and >switch testsigning off, though this is not recommended:
    bcdedit /deletevalue loadoptions
    bcdedit -set TESTSIGNING OFF
    For Windows 8.1, use the details on this page:
    [[http://www.howtogeek.com/167723/how-to-disable-driver-signature-verification-on-64-bit-windows-8.1-so-that-you-can-install-unsigned-drivers/]]
    And then restart Windows.
2. Use the tool usbip.exe, downloaded with the working driver.
a) usbip -l <HOST IP address>                to show all USB devices binded on the HOST
b) usbip -a <HOST IP address> <BUSID>        to connect to particular Device.
:-D Tested on BB release. Working at least with USB Drives and Kvaser Leaf Lite CAN gateway.

Notes

doc/howto/usb.iptunnel.txt · Last modified: 2015/01/24 01:18 by tmomas