blob: 172614d3a7e0566c2cdd988d72a1674b73f879fe [file] [log] [blame]
Gerd Hoffmann94527ea2010-12-03 16:17:28 +01001
Gerd Hoffmann649ae102018-06-05 15:29:15 +02002USB Quick Start
3===============
Gerd Hoffmann94527ea2010-12-03 16:17:28 +01004
Gerd Hoffmann649ae102018-06-05 15:29:15 +02005XHCI controller support
6-----------------------
Gerd Hoffmann76f30472011-07-05 16:58:41 +02007
Gerd Hoffmann649ae102018-06-05 15:29:15 +02008QEMU has XHCI host adapter support. The XHCI hardware design is much
9more virtualization-friendly when compared to EHCI and UHCI, thus XHCI
10emulation uses less resources (especially cpu). So if your guest
11supports XHCI (which should be the case for any operating system
12released around 2010 or later) we recommend using it:
Gerd Hoffmann94527ea2010-12-03 16:17:28 +010013
Gerd Hoffmann649ae102018-06-05 15:29:15 +020014 qemu -device qemu-xhci
15
16XHCI supports USB 1.1, USB 2.0 and USB 3.0 devices, so this is the
17only controller you need. With only a single USB controller (and
18therefore only a single USB bus) present in the system there is no
19need to use the bus= parameter when adding USB devices.
20
21
22EHCI controller support
23-----------------------
24
25The QEMU EHCI Adapter supports USB 2.0 devices. It can be used either
26standalone or with companion controllers (UHCI, OHCI) for USB 1.1
27devices. The companion controller setup is more convenient to use
28because it provides a single USB bus supporting both USB 2.0 and USB
291.1 devices. See next section for details.
30
31When running EHCI in standalone mode you can add UHCI or OHCI
32controllers for USB 1.1 devices too. Each controller creates its own
33bus though, so there are two completely separate USB buses: One USB
341.1 bus driven by the UHCI controller and one USB 2.0 bus driven by
35the EHCI controller. Devices must be attached to the correct
36controller manually.
37
38The easiest way to add a UHCI controller to a 'pc' machine is the
39'-usb' switch. QEMU will create the UHCI controller as function of
Gerd Hoffmannf9618632013-04-02 12:15:24 +020040the PIIX3 chipset. The USB 1.1 bus will carry the name "usb-bus.0".
Gerd Hoffmann94527ea2010-12-03 16:17:28 +010041
42You can use the standard -device switch to add a EHCI controller to
43your virtual machine. It is strongly recommended to specify an ID for
Ville Skyttä9277d812018-06-12 09:51:50 +030044the controller so the USB 2.0 bus gets an individual name, for example
Gerd Hoffmann94527ea2010-12-03 16:17:28 +010045'-device usb-ehci,id=ehci". This will give you a USB 2.0 bus named
46"ehci.0".
47
Gerd Hoffmann649ae102018-06-05 15:29:15 +020048When adding USB devices using the -device switch you can specify the
49bus they should be attached to. Here is a complete example:
Gerd Hoffmann94527ea2010-12-03 16:17:28 +010050
51 qemu -M pc ${otheroptions} \
52 -drive if=none,id=usbstick,file=/path/to/image \
53 -usb \
54 -device usb-ehci,id=ehci \
Gerd Hoffmannf9618632013-04-02 12:15:24 +020055 -device usb-tablet,bus=usb-bus.0 \
Gerd Hoffmann94527ea2010-12-03 16:17:28 +010056 -device usb-storage,bus=ehci.0,drive=usbstick
57
Gerd Hoffmann649ae102018-06-05 15:29:15 +020058This attaches a USB tablet to the UHCI adapter and a USB mass storage
Gerd Hoffmann94527ea2010-12-03 16:17:28 +010059device to the EHCI adapter.
60
Gerd Hoffmannf72e5022011-05-31 12:21:43 +020061
Gerd Hoffmann76f30472011-07-05 16:58:41 +020062Companion controller support
63----------------------------
64
Gerd Hoffmann649ae102018-06-05 15:29:15 +020065The UHCI and OHCI controllers can attach to a USB bus created by EHCI
66as companion controllers. This is done by specifying the masterbus
67and firstport properties. masterbus specifies the bus name the
68controller should attach to. firstport specifies the first port the
69controller should attach to, which is needed as usually one EHCI
70controller with six ports has three UHCI companion controllers with
71two ports each.
Gerd Hoffmann76f30472011-07-05 16:58:41 +020072
Gerd Hoffmann649ae102018-06-05 15:29:15 +020073There is a config file in docs which will do all this for
74you, just try ...
Gerd Hoffmann76f30472011-07-05 16:58:41 +020075
Philippe Mathieu-Daudéf31fd5c2017-07-28 19:46:06 -030076 qemu -readconfig docs/config/ich9-ehci-uhci.cfg
Gerd Hoffmann76f30472011-07-05 16:58:41 +020077
Gerd Hoffmann649ae102018-06-05 15:29:15 +020078... then use "bus=ehci.0" to assign your USB devices to that bus.
Gerd Hoffmann76f30472011-07-05 16:58:41 +020079
Gerd Hoffmann649ae102018-06-05 15:29:15 +020080Using the '-usb' switch for 'q35' machines will create a similar
81USB controller configuration.
Gerd Hoffmanne78bd5a2012-05-29 11:20:31 +020082
83
Gerd Hoffmannf72e5022011-05-31 12:21:43 +020084More USB tips & tricks
85======================
86
Gerd Hoffmann649ae102018-06-05 15:29:15 +020087Recently the USB pass through driver (also known as usb-host) and the
88QEMU USB subsystem gained a few capabilities which are available only
Gerd Hoffmannf72e5022011-05-31 12:21:43 +020089via qdev properties, i,e. when using '-device'.
90
91
92physical port addressing
93------------------------
94
Gerd Hoffmann649ae102018-06-05 15:29:15 +020095First you can (for all USB devices) specify the physical port where
Gerd Hoffmannf72e5022011-05-31 12:21:43 +020096the device will show up in the guest. This can be done using the
npes8718495c94f82018-08-01 20:24:10 +080097"port" property. UHCI has two root ports (1,2). EHCI has six root
98ports (1-6), the emulated (1.1) USB hub has eight ports.
Gerd Hoffmannf72e5022011-05-31 12:21:43 +020099
100Plugging a tablet into UHCI port 1 works like this:
101
Gerd Hoffmannf9618632013-04-02 12:15:24 +0200102 -device usb-tablet,bus=usb-bus.0,port=1
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200103
104Plugging a hub into UHCI port 2 works like this:
105
Gerd Hoffmannf9618632013-04-02 12:15:24 +0200106 -device usb-hub,bus=usb-bus.0,port=2
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200107
Gerd Hoffmann649ae102018-06-05 15:29:15 +0200108Plugging a virtual USB stick into port 4 of the hub just plugged works
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200109this way:
110
Gerd Hoffmannf9618632013-04-02 12:15:24 +0200111 -device usb-storage,bus=usb-bus.0,port=2.4,drive=...
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200112
113You can do basically the same in the monitor using the device_add
114command. If you want to unplug devices too you should specify some
115unique id which you can use to refer to the device ...
116
Gerd Hoffmannf9618632013-04-02 12:15:24 +0200117 (qemu) device_add usb-tablet,bus=usb-bus.0,port=1,id=my-tablet
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200118 (qemu) device_del my-tablet
119
120... when unplugging it with device_del.
121
122
123USB pass through hints
124----------------------
125
126The usb-host driver has a bunch of properties to specify the device
127which should be passed to the guest:
128
129 hostbus=<nr> -- Specifies the bus number the device must be attached
130 to.
131
132 hostaddr=<nr> -- Specifies the device address the device got
133 assigned by the guest os.
134
135 hostport=<str> -- Specifies the physical port the device is attached
136 to.
137
138 vendorid=<hexnr> -- Specifies the vendor ID of the device.
139 productid=<hexnr> -- Specifies the product ID of the device.
140
141In theory you can combine all these properties as you like. In
142practice only a few combinations are useful:
143
144 (1) vendorid+productid -- match for a specific device, pass it to
145 the guest when it shows up somewhere in the host.
146
147 (2) hostbus+hostport -- match for a specific physical port in the
148 host, any device which is plugged in there gets passed to the
149 guest.
150
151 (3) hostbus+hostaddr -- most useful for ad-hoc pass through as the
152 hostaddr isn't stable, the next time you plug in the device it
153 gets a new one ...
154
155Note that USB 1.1 devices are handled by UHCI/OHCI and USB 2.0 by
156EHCI. That means a device plugged into the very same physical port
Gerd Hoffmann649ae102018-06-05 15:29:15 +0200157may show up on different buses depending on the speed. The port I'm
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200158using for testing is bus 1 + port 1 for 2.0 devices and bus 3 + port 1
159for 1.1 devices. Passing through any device plugged into that port
160and also assign them to the correct bus can be done this way:
161
Gerd Hoffmannf9618632013-04-02 12:15:24 +0200162 qemu -M pc ${otheroptions} \
163 -usb \
164 -device usb-ehci,id=ehci \
165 -device usb-host,bus=usb-bus.0,hostbus=3,hostport=1 \
Gerd Hoffmannf72e5022011-05-31 12:21:43 +0200166 -device usb-host,bus=ehci.0,hostbus=1,hostport=1
167
Gerd Hoffmann94527ea2010-12-03 16:17:28 +0100168enjoy,
169 Gerd
170
171--
172Gerd Hoffmann <kraxel@redhat.com>