blob: 551af6f88bb16f8d9b567ca560280a002b5e0a44 [file] [log] [blame]
Gerd Hoffmann0f58f682012-06-08 16:03:37 +02001
2qemu usb storage emulation
3--------------------------
4
Gerd Hoffmann34707332013-01-14 15:29:44 +01005QEMU has three devices for usb storage emulation.
Gerd Hoffmann0f58f682012-06-08 16:03:37 +02006
7Number one emulates the classic bulk-only transport protocol which is
Peter Maydell085d8132013-03-18 17:20:07 +00008used by 99% of the usb sticks on the market today and is called
Gerd Hoffmann0f58f682012-06-08 16:03:37 +02009"usb-storage". Usage (hooking up to xhci, other host controllers work
10too):
11
12 qemu ${other_vm_args} \
13 -drive if=none,id=stick,file=/path/to/file.img \
14 -device nec-usb-xhci,id=xhci \
15 -device usb-storage,bus=xhci.0,drive=stick
16
17
18Number two is the newer usb attached scsi transport. This one doesn't
19automagically create a scsi disk, so you have to explicitly attach one
20manually. Multiple logical units are supported. Here is an example
21with tree logical units:
22
23 qemu ${other_vm_args} \
24 -drive if=none,id=uas-disk1,file=/path/to/file1.img \
25 -drive if=none,id=uas-disk2,file=/path/to/file2.img \
26 -drive if=none,id=uas-cdrom,media=cdrom,file=/path/to/image.iso \
27 -device nec-usb-xhci,id=xhci \
28 -device usb-uas,id=uas,bus=xhci.0 \
29 -device scsi-hd,bus=uas.0,scsi-id=0,lun=0,drive=uas-disk1 \
30 -device scsi-hd,bus=uas.0,scsi-id=0,lun=1,drive=uas-disk2 \
31 -device scsi-cd,bus=uas.0,scsi-id=0,lun=5,drive=uas-cdrom
32
33
Gerd Hoffmann34707332013-01-14 15:29:44 +010034Number three emulates the classic bulk-only transport protocol too.
35It's called "usb-bot". It shares most code with "usb-storage", and
36the guest will not be able to see the difference. The qemu command
Frediano Zigliodfaba102016-12-07 16:00:37 +000037line interface is similar to usb-uas though, i.e. no automatic scsi
Gerd Hoffmann34707332013-01-14 15:29:44 +010038disk creation. It also features support for up to 16 LUNs. The LUN
Peter Maydell085d8132013-03-18 17:20:07 +000039numbers must be continuous, i.e. for three devices you must use 0+1+2.
Gerd Hoffmann34707332013-01-14 15:29:44 +010040The 0+1+5 numbering from the "usb-uas" example isn't going to work
41with "usb-bot".
42
Gerd Hoffmannb91e0132016-06-23 09:45:01 +020043Starting with qemu version 2.7 usb-bot and usb-uas devices can be
44hotplugged. In the hotplug case they are added with "attached =
45false" so the guest will not see the device until the "attached"
46property is explicitly set to true. That allows to attach one or more
47scsi devices before making the device visible to the guest, i.e. the
48workflow looks like this:
49
50 (1) device-add usb-bot,id=foo
51 (2) device-add scsi-{hd,cd},bus=foo.0,lun=0
52 (2b) optionally add more devices (luns 1 ... 15).
53 (3) scripts/qmp/qom-set foo.attached = true
54
Gerd Hoffmann0f58f682012-06-08 16:03:37 +020055enjoy,
56 Gerd
57
58--
59Gerd Hoffmann <kraxel@redhat.com>