How To Set Up A USB-Over-IP Server And Client With Debian Lenny - Page 2
3 Installing And Using USB/IP On The Client
client1:
First we must install usbip on the client. The steps are the same as on the server:
vi /etc/apt/sources.list
Add the Debian Squeeze (testing) repositories at the end of the file:
[...] ## Squeeze / Testing deb http://ftp2.de.debian.org/debian/ squeeze main deb-src http://ftp2.de.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main |
vi /etc/apt/apt.conf
Put the following line into this file:
APT::Cache-Limit "100000000"; |
vi /etc/apt/preferences
Make the file look as follows:
Package: * Pin: release a=stable Pin-Priority: 700 Package: * Pin: release a=testing Pin-Priority: 650 |
Update the package database...
aptitude update
... and install usbip as follows:
aptitude install usbip usbip-source module-assistant
We need to build the usbip kernel modules for our Debian Lenny kernel, that's why we must install the usbip-source and module-assistant packages as well. We can now build the kernel modules as follows:
m-a prepare
m-a update
m-a a-i usbip-source
Afterwards we load the vhci-hcd kernel module:
modprobe vhci-hcd
To check if it really got loaded, run:
lsmod | grep vhci_hcd
The output should be similar to this one:
client1:~# lsmod | grep vhci_hcd
vhci_hcd 15844 0
usbip_common_mod 11332 1 vhci_hcd
usbcore 118160 2 vhci_hcd
client1:~#
To make sure that the module gets loaded automatically whenever you boot the system, you can add it to /etc/modules:
vi /etc/modules
[...] vhci-hcd |
Now connect to the usbip server and get a list of available USB devices:
usbip -l 192.168.0.100
(192.168.0.100 is the IP address of the usbip server.)
You should find the SanDisk USB flash drive in the output (BUSID 4-5):
client1:~# usbip -l 192.168.0.100
- 192.168.0.100
4-5: SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
: /sys/devices/pci0000:00/0000:00:04.1/usb4/4-5
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
client1:~#
To attach that device to the client, run:
usbip -a 192.168.0.100 4-5
client1:~# usbip -a 192.168.0.100 4-5
8 ports available
port 0 attached
client1:~#
Now run...
lsusb
... and you should find the remote USB device in the output on the client:
client1:~# lsusb
Bus 001 Device 004: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~#
You can now use the remote USB device as if it was a local USB device (e.g. mount it, format it, write to it, read form it, etc.).
4 Detaching A Remote USB Device
A remote USB device can be detached as follows:
client1:
Run...
usbip --port
... to find out the port that the remote USB device uses on the client - in this case it's port 00:
client1:~# usbip --port
8 ports available
Port 00: <Port in Use> at High Speed(480Mbps)
SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
1-1 -> usbip://192.168.0.100:3240/4-5 (remote devid 00040002 (bus/dev 004/002))
1-1:1.0 used by usb-storage
/sys/class/bsg/1:0:0:0/device
/sys/class/scsi_device/1:0:0:0/device
/sys/class/scsi_disk/1:0:0:0/device
/sys/class/scsi_host/host1/device
/sys/class/usb_endpoint/usbdev1.4_ep02/device
/sys/class/usb_endpoint/usbdev1.4_ep81/device
/sys/block/sdb/device
Port 01: <Port Available>
Port 02: <Port Available>
Port 03: <Port Available>
Port 04: <Port Available>
Port 05: <Port Available>
Port 06: <Port Available>
Port 07: <Port Available>
client1:~#
We need the port number to detach the device:
usbip -d 00
client1:~# usbip -d 00
8 ports available
port 0 detached
client1:~#
On the server, we use the BUSID (4-5) to bind the USB device to the local system (the --other switch binds the device to the local system so that it is not available over the network anymore):
server1:
usbip_bind_driver --other 4-5
server1:~# usbip_bind_driver --other 4-5
** (process:7333): DEBUG: write "del 4-5" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 4-5 to other drivers than usbip, complete!
server1:~#
Now go back to the client and check if the remote USB device is still available:
client1:
lsusb
If all goes well, it shouldn't be listed anymore:
client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~#
5 Links
- USB/IP Project: http://usbip.sourceforge.net/
- Debian: http://www.debian.org/