rjw | 1f88458 | 2022-01-06 17:20:42 +0800 | [diff] [blame^] | 1 | # |
| 2 | # README for usbip-utils |
| 3 | # |
| 4 | # Copyright (C) 2011 matt mooney <mfm@muteddisk.com> |
| 5 | # 2005-2008 Takahiro Hirofuchi |
| 6 | |
| 7 | [Overview] |
| 8 | USB/IP protocol allows to pass USB device from server to client over the |
| 9 | network. Server is a machine which provides (shares) a USB device. Client is |
| 10 | a machine which uses USB device provided by server over the network. |
| 11 | The USB device may be either physical device connected to a server or |
| 12 | software entity created on a server using USB gadget subsystem. |
| 13 | Whole project consists of four parts: |
| 14 | |
| 15 | - usbip-vhci |
| 16 | A client side kernel module which provides a virtual USB Host Controller |
| 17 | and allows to import a USB device from a remote machine. |
| 18 | |
| 19 | - usbip-host (stub driver) |
| 20 | A server side module which provides a USB device driver which can be |
| 21 | bound to a physical USB device to make it exportable. |
| 22 | |
| 23 | - usbip-vudc |
| 24 | A server side module which provides a virtual USB Device Controller and allows |
| 25 | to export a USB device created using USB Gadget Subsystem. |
| 26 | |
| 27 | - usbip-utils |
| 28 | A set of userspace tools used to handle connection and management. |
| 29 | Used on both sides. |
| 30 | |
| 31 | [Requirements] |
| 32 | - USB/IP device drivers |
| 33 | Found in the drivers/usb/usbip/ directory of the Linux kernel tree. |
| 34 | |
| 35 | - libudev >= 2.0 |
| 36 | libudev library |
| 37 | |
| 38 | - libwrap0-dev |
| 39 | tcp wrapper library |
| 40 | |
| 41 | - gcc >= 4.0 |
| 42 | |
| 43 | - libtool, automake >= 1.9, autoconf >= 2.5.0, pkg-config |
| 44 | |
| 45 | [Optional] |
| 46 | - hwdata |
| 47 | Contains USB device identification data. |
| 48 | |
| 49 | |
| 50 | [Install] |
| 51 | 0. Generate configuration scripts. |
| 52 | $ ./autogen.sh |
| 53 | |
| 54 | 1. Compile & install the userspace utilities. |
| 55 | $ ./configure [--with-tcp-wrappers=no] [--with-usbids-dir=<dir>] |
| 56 | $ make install |
| 57 | |
| 58 | 2. Compile & install USB/IP drivers. |
| 59 | |
| 60 | |
| 61 | [Usage] |
| 62 | On a server side there are two entities which can be shared. |
| 63 | First of them is physical usb device connected to the machine. |
| 64 | To make it available below steps should be executed: |
| 65 | |
| 66 | server:# (Physically attach your USB device.) |
| 67 | |
| 68 | server:# insmod usbip-core.ko |
| 69 | server:# insmod usbip-host.ko |
| 70 | |
| 71 | server:# usbipd -D |
| 72 | - Start usbip daemon. |
| 73 | |
| 74 | server:# usbip list -l |
| 75 | - List driver assignments for USB devices. |
| 76 | |
| 77 | server:# usbip bind --busid 1-2 |
| 78 | - Bind usbip-host.ko to the device with busid 1-2. |
| 79 | - The USB device 1-2 is now exportable to other hosts! |
| 80 | - Use `usbip unbind --busid 1-2' to stop exporting the device. |
| 81 | |
| 82 | Second of shareable entities is USB Gadget created using USB Gadget Subsystem |
| 83 | on a server machine. To make it available below steps should be executed: |
| 84 | |
| 85 | server:# (Create your USB gadget) |
| 86 | - Currently the most preferable way of creating a new USB gadget |
| 87 | is ConfigFS Composite Gadget. Please refer to its documentation |
| 88 | for details. |
| 89 | - See vudc_server_example.sh for a short example of USB gadget creation |
| 90 | |
| 91 | server:# insmod usbip-core.ko |
| 92 | server:# insmod usbip-vudc.ko |
| 93 | - To create more than one instance of vudc use num module param |
| 94 | |
| 95 | server:# (Bind gadget to one of available vudc) |
| 96 | - Assign your new gadget to USB/IP UDC |
| 97 | - Using ConfigFS interface you may do this simply by: |
| 98 | server:# cd /sys/kernel/config/usb_gadget/<gadget_name> |
| 99 | server:# echo "usbip-vudc.0" > UDC |
| 100 | |
| 101 | server:# usbipd -D --device |
| 102 | - Start usbip daemon. |
| 103 | |
| 104 | To attach new device to client machine below commands should be used: |
| 105 | |
| 106 | client:# insmod usbip-core.ko |
| 107 | client:# insmod vhci-hcd.ko |
| 108 | |
| 109 | client:# usbip list --remote <host> |
| 110 | - List exported USB devices on the <host>. |
| 111 | |
| 112 | client:# usbip attach --remote <host> --busid 1-2 |
| 113 | - Connect the remote USB device. |
| 114 | - When using vudc on a server side busid is really vudc instance name. |
| 115 | For example: usbip-vudc.0 |
| 116 | |
| 117 | client:# usbip port |
| 118 | - Show virtual port status. |
| 119 | |
| 120 | client:# usbip detach --port <port> |
| 121 | - Detach the USB device. |
| 122 | |
| 123 | |
| 124 | [Example] |
| 125 | --------------------------- |
| 126 | SERVER SIDE |
| 127 | --------------------------- |
| 128 | Physically attach your USB devices to this host. |
| 129 | |
| 130 | trois:# insmod path/to/usbip-core.ko |
| 131 | trois:# insmod path/to/usbip-host.ko |
| 132 | trois:# usbipd -D |
| 133 | |
| 134 | In another terminal, let's look up what USB devices are physically |
| 135 | attached to this host. |
| 136 | |
| 137 | trois:# usbip list -l |
| 138 | Local USB devices |
| 139 | ================= |
| 140 | - busid 1-1 (05a9:a511) |
| 141 | 1-1:1.0 -> ov511 |
| 142 | |
| 143 | - busid 3-2 (0711:0902) |
| 144 | 3-2:1.0 -> none |
| 145 | |
| 146 | - busid 3-3.1 (08bb:2702) |
| 147 | 3-3.1:1.0 -> snd-usb-audio |
| 148 | 3-3.1:1.1 -> snd-usb-audio |
| 149 | |
| 150 | - busid 3-3.2 (04bb:0206) |
| 151 | 3-3.2:1.0 -> usb-storage |
| 152 | |
| 153 | - busid 3-3 (0409:0058) |
| 154 | 3-3:1.0 -> hub |
| 155 | |
| 156 | - busid 4-1 (046d:08b2) |
| 157 | 4-1:1.0 -> none |
| 158 | 4-1:1.1 -> none |
| 159 | 4-1:1.2 -> none |
| 160 | |
| 161 | - busid 5-2 (058f:9254) |
| 162 | 5-2:1.0 -> hub |
| 163 | |
| 164 | A USB storage device of busid 3-3.2 is now bound to the usb-storage |
| 165 | driver. To export this device, we first mark the device as |
| 166 | "exportable"; the device is bound to the usbip-host driver. Please |
| 167 | remember you can not export a USB hub. |
| 168 | |
| 169 | Mark the device of busid 3-3.2 as exportable: |
| 170 | |
| 171 | trois:# usbip --debug bind --busid 3-3.2 |
| 172 | ... |
| 173 | usbip debug: usbip_bind.c:162:[unbind_other] 3-3.2:1.0 -> usb-storage |
| 174 | ... |
| 175 | bind device on busid 3-3.2: complete |
| 176 | |
| 177 | trois:# usbip list -l |
| 178 | Local USB devices |
| 179 | ================= |
| 180 | ... |
| 181 | |
| 182 | - busid 3-3.2 (04bb:0206) |
| 183 | 3-3.2:1.0 -> usbip-host |
| 184 | ... |
| 185 | |
| 186 | --------------------------- |
| 187 | CLIENT SIDE |
| 188 | --------------------------- |
| 189 | First, let's list available remote devices that are marked as |
| 190 | exportable on the host. |
| 191 | |
| 192 | deux:# insmod path/to/usbip-core.ko |
| 193 | deux:# insmod path/to/vhci-hcd.ko |
| 194 | |
| 195 | deux:# usbip list --remote 10.0.0.3 |
| 196 | Exportable USB devices |
| 197 | ====================== |
| 198 | - 10.0.0.3 |
| 199 | 1-1: Prolific Technology, Inc. : unknown product (067b:3507) |
| 200 | : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-1 |
| 201 | : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) |
| 202 | : 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50) |
| 203 | |
| 204 | 1-2.2.1: Apple Computer, Inc. : unknown product (05ac:0203) |
| 205 | : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.1 |
| 206 | : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) |
| 207 | : 0 - Human Interface Devices / Boot Interface Subclass / Keyboard (03/01/01) |
| 208 | |
| 209 | 1-2.2.3: OmniVision Technologies, Inc. : OV511+ WebCam (05a9:a511) |
| 210 | : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.3 |
| 211 | : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) |
| 212 | : 0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00) |
| 213 | |
| 214 | 3-1: Logitech, Inc. : QuickCam Pro 4000 (046d:08b2) |
| 215 | : /sys/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/usb3/3-1 |
| 216 | : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) |
| 217 | : 0 - Data / unknown subclass / unknown protocol (0a/ff/00) |
| 218 | : 1 - Audio / Control Device / unknown protocol (01/01/00) |
| 219 | : 2 - Audio / Streaming / unknown protocol (01/02/00) |
| 220 | |
| 221 | Attach a remote USB device: |
| 222 | |
| 223 | deux:# usbip attach --remote 10.0.0.3 --busid 1-1 |
| 224 | port 0 attached |
| 225 | |
| 226 | Show the devices attached to this client: |
| 227 | |
| 228 | deux:# usbip port |
| 229 | Port 00: <Port in Use> at Full Speed(12Mbps) |
| 230 | Prolific Technology, Inc. : unknown product (067b:3507) |
| 231 | 6-1 -> usbip://10.0.0.3:3240/1-1 (remote bus/dev 001/004) |
| 232 | 6-1:1.0 used by usb-storage |
| 233 | /sys/class/scsi_device/0:0:0:0/device |
| 234 | /sys/class/scsi_host/host0/device |
| 235 | /sys/block/sda/device |
| 236 | |
| 237 | Detach the imported device: |
| 238 | |
| 239 | deux:# usbip detach --port 0 |
| 240 | port 0 detached |
| 241 | |
| 242 | |
| 243 | [Checklist] |
| 244 | - See 'Debug Tips' on the project wiki. |
| 245 | - http://usbip.wiki.sourceforge.net/how-to-debug-usbip |
| 246 | - usbip-host.ko must be bound to the target device. |
| 247 | - See /sys/kernel/debug/usb/devices and find "Driver=..." lines of the device. |
| 248 | - Target USB gadget must be bound to vudc |
| 249 | (using USB gadget susbsys, not usbip bind command) |
| 250 | - Shutdown firewall. |
| 251 | - usbip now uses TCP port 3240. |
| 252 | - Disable SELinux. |
| 253 | - Check the kernel and daemon messages. |
| 254 | |
| 255 | |
| 256 | [Contact] |
| 257 | Mailing List: linux-usb@vger.kernel.org |