2012-06-08 16:03:37 +02:00
|
|
|
|
|
|
|
qemu usb storage emulation
|
|
|
|
--------------------------
|
|
|
|
|
2013-01-14 15:29:44 +01:00
|
|
|
QEMU has three devices for usb storage emulation.
|
2012-06-08 16:03:37 +02:00
|
|
|
|
|
|
|
Number one emulates the classic bulk-only transport protocol which is
|
2013-03-18 18:20:07 +01:00
|
|
|
used by 99% of the usb sticks on the market today and is called
|
2012-06-08 16:03:37 +02:00
|
|
|
"usb-storage". Usage (hooking up to xhci, other host controllers work
|
|
|
|
too):
|
|
|
|
|
|
|
|
qemu ${other_vm_args} \
|
|
|
|
-drive if=none,id=stick,file=/path/to/file.img \
|
|
|
|
-device nec-usb-xhci,id=xhci \
|
|
|
|
-device usb-storage,bus=xhci.0,drive=stick
|
|
|
|
|
|
|
|
|
|
|
|
Number two is the newer usb attached scsi transport. This one doesn't
|
|
|
|
automagically create a scsi disk, so you have to explicitly attach one
|
|
|
|
manually. Multiple logical units are supported. Here is an example
|
|
|
|
with tree logical units:
|
|
|
|
|
|
|
|
qemu ${other_vm_args} \
|
|
|
|
-drive if=none,id=uas-disk1,file=/path/to/file1.img \
|
|
|
|
-drive if=none,id=uas-disk2,file=/path/to/file2.img \
|
|
|
|
-drive if=none,id=uas-cdrom,media=cdrom,file=/path/to/image.iso \
|
|
|
|
-device nec-usb-xhci,id=xhci \
|
|
|
|
-device usb-uas,id=uas,bus=xhci.0 \
|
|
|
|
-device scsi-hd,bus=uas.0,scsi-id=0,lun=0,drive=uas-disk1 \
|
|
|
|
-device scsi-hd,bus=uas.0,scsi-id=0,lun=1,drive=uas-disk2 \
|
|
|
|
-device scsi-cd,bus=uas.0,scsi-id=0,lun=5,drive=uas-cdrom
|
|
|
|
|
|
|
|
|
2013-01-14 15:29:44 +01:00
|
|
|
Number three emulates the classic bulk-only transport protocol too.
|
|
|
|
It's called "usb-bot". It shares most code with "usb-storage", and
|
|
|
|
the guest will not be able to see the difference. The qemu command
|
2016-12-07 17:00:37 +01:00
|
|
|
line interface is similar to usb-uas though, i.e. no automatic scsi
|
2013-01-14 15:29:44 +01:00
|
|
|
disk creation. It also features support for up to 16 LUNs. The LUN
|
2013-03-18 18:20:07 +01:00
|
|
|
numbers must be continuous, i.e. for three devices you must use 0+1+2.
|
2013-01-14 15:29:44 +01:00
|
|
|
The 0+1+5 numbering from the "usb-uas" example isn't going to work
|
|
|
|
with "usb-bot".
|
|
|
|
|
2016-06-23 09:45:01 +02:00
|
|
|
Starting with qemu version 2.7 usb-bot and usb-uas devices can be
|
|
|
|
hotplugged. In the hotplug case they are added with "attached =
|
|
|
|
false" so the guest will not see the device until the "attached"
|
|
|
|
property is explicitly set to true. That allows to attach one or more
|
|
|
|
scsi devices before making the device visible to the guest, i.e. the
|
|
|
|
workflow looks like this:
|
|
|
|
|
|
|
|
(1) device-add usb-bot,id=foo
|
|
|
|
(2) device-add scsi-{hd,cd},bus=foo.0,lun=0
|
|
|
|
(2b) optionally add more devices (luns 1 ... 15).
|
|
|
|
(3) scripts/qmp/qom-set foo.attached = true
|
|
|
|
|
2012-06-08 16:03:37 +02:00
|
|
|
enjoy,
|
|
|
|
Gerd
|
|
|
|
|
|
|
|
--
|
|
|
|
Gerd Hoffmann <kraxel@redhat.com>
|