xref: /openbmc/linux/tools/usb/usbip/README (revision a00dfd4d)
1588b48caSValentina Manea#
2588b48caSValentina Manea# README for usbip-utils
3588b48caSValentina Manea#
4588b48caSValentina Manea# Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
5588b48caSValentina Manea#               2005-2008 Takahiro Hirofuchi
6588b48caSValentina Manea
7444d9309SKrzysztof Opasiak[Overview]
8444d9309SKrzysztof OpasiakUSB/IP protocol allows to pass USB device from server to client over the
9444d9309SKrzysztof Opasiaknetwork. Server is a machine which provides (shares) a USB device. Client is
10444d9309SKrzysztof Opasiaka machine which uses USB device provided by server over the network.
11444d9309SKrzysztof OpasiakThe USB device may be either physical device connected to a server or
12444d9309SKrzysztof Opasiaksoftware entity created on a server using USB gadget subsystem.
13444d9309SKrzysztof OpasiakWhole project consists of four parts:
14444d9309SKrzysztof Opasiak
15444d9309SKrzysztof Opasiak    - usbip-vhci
16444d9309SKrzysztof Opasiak        A client side kernel module which provides a virtual USB Host Controller
17444d9309SKrzysztof Opasiak        and allows to import a USB device from a remote machine.
18444d9309SKrzysztof Opasiak
19444d9309SKrzysztof Opasiak    - usbip-host (stub driver)
20444d9309SKrzysztof Opasiak        A server side module which provides a USB device driver which can be
21444d9309SKrzysztof Opasiak        bound to a physical USB device to make it exportable.
22444d9309SKrzysztof Opasiak
23444d9309SKrzysztof Opasiak    - usbip-vudc
24444d9309SKrzysztof Opasiak        A server side module which provides a virtual USB Device Controller and allows
25444d9309SKrzysztof Opasiak        to export a USB device created using USB Gadget Subsystem.
26444d9309SKrzysztof Opasiak
27444d9309SKrzysztof Opasiak    - usbip-utils
28444d9309SKrzysztof Opasiak        A set of userspace tools used to handle connection and management.
29444d9309SKrzysztof Opasiak        Used on both sides.
30588b48caSValentina Manea
31588b48caSValentina Manea[Requirements]
32588b48caSValentina Manea    - USB/IP device drivers
33444d9309SKrzysztof Opasiak        Found in the drivers/usb/usbip/ directory of the Linux kernel tree.
34588b48caSValentina Manea
35588b48caSValentina Manea    - libudev >= 2.0
36588b48caSValentina Manea	libudev library
37588b48caSValentina Manea
38588b48caSValentina Manea    - libwrap0-dev
39588b48caSValentina Manea	tcp wrapper library
40588b48caSValentina Manea
41588b48caSValentina Manea    - gcc >= 4.0
42588b48caSValentina Manea
43588b48caSValentina Manea    - libtool, automake >= 1.9, autoconf >= 2.5.0, pkg-config
44588b48caSValentina Manea
45588b48caSValentina Manea[Optional]
46588b48caSValentina Manea    - hwdata
47588b48caSValentina Manea        Contains USB device identification data.
48588b48caSValentina Manea
49588b48caSValentina Manea
50588b48caSValentina Manea[Install]
51588b48caSValentina Manea    0. Generate configuration scripts.
52588b48caSValentina Manea	$ ./autogen.sh
53588b48caSValentina Manea
54588b48caSValentina Manea    1. Compile & install the userspace utilities.
55588b48caSValentina Manea	$ ./configure [--with-tcp-wrappers=no] [--with-usbids-dir=<dir>]
56588b48caSValentina Manea	$ make install
57588b48caSValentina Manea
58588b48caSValentina Manea    2. Compile & install USB/IP drivers.
59588b48caSValentina Manea
60588b48caSValentina Manea
61588b48caSValentina Manea[Usage]
62444d9309SKrzysztof OpasiakOn a server side there are two entities which can be shared.
63444d9309SKrzysztof OpasiakFirst of them is physical usb device connected to the machine.
64444d9309SKrzysztof OpasiakTo make it available below steps should be executed:
65444d9309SKrzysztof Opasiak
66588b48caSValentina Manea    server:# (Physically attach your USB device.)
67588b48caSValentina Manea
68588b48caSValentina Manea    server:# insmod usbip-core.ko
69588b48caSValentina Manea    server:# insmod usbip-host.ko
70588b48caSValentina Manea
71588b48caSValentina Manea    server:# usbipd -D
72588b48caSValentina Manea	- Start usbip daemon.
73588b48caSValentina Manea
74588b48caSValentina Manea    server:# usbip list -l
75588b48caSValentina Manea	- List driver assignments for USB devices.
76588b48caSValentina Manea
77588b48caSValentina Manea    server:# usbip bind --busid 1-2
78588b48caSValentina Manea	- Bind usbip-host.ko to the device with busid 1-2.
79588b48caSValentina Manea	- The USB device 1-2 is now exportable to other hosts!
80588b48caSValentina Manea	- Use `usbip unbind --busid 1-2' to stop exporting the device.
81588b48caSValentina Manea
82444d9309SKrzysztof OpasiakSecond of shareable entities is USB Gadget created using USB Gadget Subsystem
83444d9309SKrzysztof Opasiakon a server machine. To make it available below steps should be executed:
84444d9309SKrzysztof Opasiak
85444d9309SKrzysztof Opasiak    server:# (Create your USB gadget)
86444d9309SKrzysztof Opasiak        - Currently the most preferable way of creating a new USB gadget
87444d9309SKrzysztof Opasiak          is ConfigFS Composite Gadget. Please refer to its documentation
88444d9309SKrzysztof Opasiak          for details.
89444d9309SKrzysztof Opasiak        - See vudc_server_example.sh for a short example of USB gadget creation
90444d9309SKrzysztof Opasiak
91444d9309SKrzysztof Opasiak    server:# insmod usbip-core.ko
92444d9309SKrzysztof Opasiak    server:# insmod usbip-vudc.ko
93444d9309SKrzysztof Opasiak        - To create more than one instance of vudc use num module param
94444d9309SKrzysztof Opasiak
95444d9309SKrzysztof Opasiak    server:# (Bind gadget to one of available vudc)
96444d9309SKrzysztof Opasiak        - Assign your new gadget to USB/IP UDC
97444d9309SKrzysztof Opasiak        - Using ConfigFS interface you may do this simply by:
98444d9309SKrzysztof Opasiak            server:# cd /sys/kernel/config/usb_gadget/<gadget_name>
99444d9309SKrzysztof Opasiak            server:# echo "usbip-vudc.0" > UDC
100444d9309SKrzysztof Opasiak
101444d9309SKrzysztof Opasiak    server:# usbipd -D --device
102444d9309SKrzysztof Opasiak        - Start usbip daemon.
103444d9309SKrzysztof Opasiak
104444d9309SKrzysztof OpasiakTo attach new device to client machine below commands should be used:
105444d9309SKrzysztof Opasiak
106588b48caSValentina Manea    client:# insmod usbip-core.ko
107588b48caSValentina Manea    client:# insmod vhci-hcd.ko
108588b48caSValentina Manea
109588b48caSValentina Manea    client:# usbip list --remote <host>
110588b48caSValentina Manea	- List exported USB devices on the <host>.
111588b48caSValentina Manea
112588b48caSValentina Manea    client:# usbip attach --remote <host> --busid 1-2
113588b48caSValentina Manea	- Connect the remote USB device.
114444d9309SKrzysztof Opasiak	- When using vudc on a server side busid is really vudc instance name.
115444d9309SKrzysztof Opasiak	  For example: usbip-vudc.0
116588b48caSValentina Manea
117588b48caSValentina Manea    client:# usbip port
118588b48caSValentina Manea	- Show virtual port status.
119588b48caSValentina Manea
120588b48caSValentina Manea    client:# usbip detach --port <port>
121588b48caSValentina Manea	- Detach the USB device.
122588b48caSValentina Manea
123588b48caSValentina Manea
124588b48caSValentina Manea[Example]
125588b48caSValentina Manea---------------------------
126588b48caSValentina Manea	SERVER SIDE
127588b48caSValentina Manea---------------------------
128588b48caSValentina ManeaPhysically attach your USB devices to this host.
129588b48caSValentina Manea
130588b48caSValentina Manea    trois:# insmod path/to/usbip-core.ko
131588b48caSValentina Manea    trois:# insmod path/to/usbip-host.ko
132588b48caSValentina Manea    trois:# usbipd -D
133588b48caSValentina Manea
134588b48caSValentina ManeaIn another terminal, let's look up what USB devices are physically
135588b48caSValentina Maneaattached to this host.
136588b48caSValentina Manea
137588b48caSValentina Manea    trois:# usbip list -l
138588b48caSValentina Manea    Local USB devices
139588b48caSValentina Manea    =================
140588b48caSValentina Manea     - busid 1-1 (05a9:a511)
141a00dfd4dSMagnus Damm	     1-1:1.0
142588b48caSValentina Manea
143588b48caSValentina Manea     - busid 3-2 (0711:0902)
144a00dfd4dSMagnus Damm	     3-2:1.0
145588b48caSValentina Manea
146588b48caSValentina Manea     - busid 3-3.1 (08bb:2702)
147a00dfd4dSMagnus Damm	     3-3.1:1.0
148a00dfd4dSMagnus Damm	     3-3.1:1.1
149588b48caSValentina Manea
150588b48caSValentina Manea     - busid 3-3.2 (04bb:0206)
151a00dfd4dSMagnus Damm	     3-3.2:1.0
152588b48caSValentina Manea
153588b48caSValentina Manea     - busid 3-3 (0409:0058)
154a00dfd4dSMagnus Damm	     3-3:1.0
155588b48caSValentina Manea
156588b48caSValentina Manea     - busid 4-1 (046d:08b2)
157a00dfd4dSMagnus Damm	     4-1:1.0
158a00dfd4dSMagnus Damm	     4-1:1.1
159a00dfd4dSMagnus Damm	     4-1:1.2
160588b48caSValentina Manea
161588b48caSValentina Manea     - busid 5-2 (058f:9254)
162a00dfd4dSMagnus Damm	     5-2:1.0
163588b48caSValentina Manea
164588b48caSValentina ManeaA USB storage device of busid 3-3.2 is now bound to the usb-storage
165588b48caSValentina Maneadriver. To export this device, we first mark the device as
166588b48caSValentina Manea"exportable"; the device is bound to the usbip-host driver. Please
167588b48caSValentina Manearemember you can not export a USB hub.
168588b48caSValentina Manea
169588b48caSValentina ManeaMark the device of busid 3-3.2 as exportable:
170588b48caSValentina Manea
171588b48caSValentina Manea    trois:# usbip --debug bind --busid 3-3.2
172588b48caSValentina Manea    ...
173588b48caSValentina Manea    usbip debug: usbip_bind.c:162:[unbind_other] 3-3.2:1.0 -> usb-storage
174588b48caSValentina Manea    ...
175588b48caSValentina Manea    bind device on busid 3-3.2: complete
176588b48caSValentina Manea
177588b48caSValentina Manea    trois:# usbip list -l
178588b48caSValentina Manea    Local USB devices
179588b48caSValentina Manea    =================
180588b48caSValentina Manea    ...
181588b48caSValentina Manea
182588b48caSValentina Manea     - busid 3-3.2 (04bb:0206)
183a00dfd4dSMagnus Damm	     3-3.2:1.0
184588b48caSValentina Manea    ...
185588b48caSValentina Manea
186588b48caSValentina Manea---------------------------
187588b48caSValentina Manea	CLIENT SIDE
188588b48caSValentina Manea---------------------------
189588b48caSValentina ManeaFirst, let's list available remote devices that are marked as
190588b48caSValentina Maneaexportable on the host.
191588b48caSValentina Manea
192588b48caSValentina Manea    deux:# insmod path/to/usbip-core.ko
193588b48caSValentina Manea    deux:# insmod path/to/vhci-hcd.ko
194588b48caSValentina Manea
195588b48caSValentina Manea    deux:# usbip list --remote 10.0.0.3
196588b48caSValentina Manea    Exportable USB devices
197588b48caSValentina Manea    ======================
198588b48caSValentina Manea     - 10.0.0.3
199588b48caSValentina Manea	    1-1: Prolific Technology, Inc. : unknown product (067b:3507)
200588b48caSValentina Manea	       : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-1
201588b48caSValentina Manea	       : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
202588b48caSValentina Manea	       :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
203588b48caSValentina Manea
204588b48caSValentina Manea	1-2.2.1: Apple Computer, Inc. : unknown product (05ac:0203)
205588b48caSValentina Manea	       : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.1
206588b48caSValentina Manea	       : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
207588b48caSValentina Manea	       :  0 - Human Interface Devices / Boot Interface Subclass / Keyboard (03/01/01)
208588b48caSValentina Manea
209588b48caSValentina Manea	1-2.2.3: OmniVision Technologies, Inc. : OV511+ WebCam (05a9:a511)
210588b48caSValentina Manea	       : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.3
211588b48caSValentina Manea	       : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
212588b48caSValentina Manea	       :  0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
213588b48caSValentina Manea
214588b48caSValentina Manea	    3-1: Logitech, Inc. : QuickCam Pro 4000 (046d:08b2)
215588b48caSValentina Manea	       : /sys/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/usb3/3-1
216588b48caSValentina Manea	       : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
217588b48caSValentina Manea	       :  0 - Data / unknown subclass / unknown protocol (0a/ff/00)
218588b48caSValentina Manea	       :  1 - Audio / Control Device / unknown protocol (01/01/00)
219588b48caSValentina Manea	       :  2 - Audio / Streaming / unknown protocol (01/02/00)
220588b48caSValentina Manea
221588b48caSValentina ManeaAttach a remote USB device:
222588b48caSValentina Manea
223588b48caSValentina Manea    deux:# usbip attach --remote 10.0.0.3 --busid 1-1
224588b48caSValentina Manea    port 0 attached
225588b48caSValentina Manea
226588b48caSValentina ManeaShow the devices attached to this client:
227588b48caSValentina Manea
228588b48caSValentina Manea    deux:# usbip port
229588b48caSValentina Manea    Port 00: <Port in Use> at Full Speed(12Mbps)
230588b48caSValentina Manea	   Prolific Technology, Inc. : unknown product (067b:3507)
231588b48caSValentina Manea	   6-1 -> usbip://10.0.0.3:3240/1-1  (remote bus/dev 001/004)
232588b48caSValentina Manea	   6-1:1.0 used by usb-storage
233588b48caSValentina Manea			  /sys/class/scsi_device/0:0:0:0/device
234588b48caSValentina Manea			  /sys/class/scsi_host/host0/device
235588b48caSValentina Manea			  /sys/block/sda/device
236588b48caSValentina Manea
237588b48caSValentina ManeaDetach the imported device:
238588b48caSValentina Manea
239588b48caSValentina Manea    deux:# usbip detach --port 0
240588b48caSValentina Manea    port 0 detached
241588b48caSValentina Manea
242588b48caSValentina Manea
243588b48caSValentina Manea[Checklist]
244588b48caSValentina Manea    - See 'Debug Tips' on the project wiki.
245588b48caSValentina Manea	- http://usbip.wiki.sourceforge.net/how-to-debug-usbip
246588b48caSValentina Manea    - usbip-host.ko must be bound to the target device.
24721470e32SMauro Carvalho Chehab	- See /sys/kernel/debug/usb/devices and find "Driver=..." lines of the device.
248444d9309SKrzysztof Opasiak    - Target USB gadget must be bound to vudc
249444d9309SKrzysztof Opasiak      (using USB gadget susbsys, not usbip bind command)
250588b48caSValentina Manea    - Shutdown firewall.
251588b48caSValentina Manea	- usbip now uses TCP port 3240.
252588b48caSValentina Manea    - Disable SELinux.
253588b48caSValentina Manea    - Check the kernel and daemon messages.
254588b48caSValentina Manea
255588b48caSValentina Manea
256588b48caSValentina Manea[Contact]
257588b48caSValentina Manea    Mailing List: linux-usb@vger.kernel.org
258