USB в Xen
Материал из Xgu.ru
Существует несколько способов получить доступ к USB-устройству
из гостевого домена Xen:
- Для HVM-доменов: Посредством эмуляционного слоя QEMU (основной способ);
- Как к блочному устройству (подходит не для всех устройств);
- Выполнив проброску PCI-устройства USB-контроллер внутрь домена;
- По сети.
Содержание |
[править] Подключение USB-устройств через эмуляционный слой QEMU
I think there are actually a couple of ways to achieve this, though i've only tested one.
Depending on the type of usb device, you can pass it to the HVM. in your config file make sure you have:
usb = 1 usbdevice = "host:0529:0001" where xxxx:yyyy is the "id" section in lsusb.
i.e.
[root@pyro xen]# lsusb Bus 007 Device 001: ID 0000:0000 Bus 004 Device 003: ID 05f3:0203 PI Engineering, Inc. Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 006 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 Bus 005 Device 001: ID 0000:0000
i would put
usbdevice="host:05f3:0203"
'host' is the correct word to use, not your actual server host name.
This potentially passes the usb device to the domU. However i've only gotten it to work with a few usb device (usb drive being one of the successful ones). All the others fail with "usb_host: only one interface supported"
Secondly,
In theory, the usb drive should show up as a device when you plug it in,
i.e. /dev/sdb
I would think you should be able to add this to your disk parameter in
the config file and the domU will treat it as a normal disk. I've not
tested that though.
Also you can use qemu to add/remove usb devices as long as
usb=1
is set in your config. This is the same that option 1 does. If you
have access to the qemu monitor, you can use
usb_add host:xxxx:yyyy
to add new usb devices.
Если в системе есть несколько устройств, у которых совпадает vendor_id и device_id, можно использовать идентификаторы устройств:
bus.devnum
Например:
host:3.13
Если доступен QEMU-монитор, можно воспользоваться командой info usbhost:
(qemu) info usbhost (qemu) Device 3.13, speed 12 Mb/s Class 00: USB device 054c:01fb, Network Walkman
Можно определить устройства через хост-систему, при помощи команды lsusb. Например, для устройств:
%# lsusb Bus 004 Device 001: ID 0000:0000 Bus 004 Device 002: ID 0644:0000 TEAC Corp. Floppy Bus 001 Device 001: ID 0000:0000 Bus 003 Device 003: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06 Bus 003 Device 002: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06 Bus 003 Device 001: ID 0000:0000 Bus 005 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000
будут использоваться идентификаторы host:3.3 и host:3.2.
I used http://qemu-forum.ipi.fi/viewtopic.php?t=1434 which helped clarify a few things.
[править] Подключение USB-устройства с помощью монитора QEMU
Подключение устройства в работающую систему выполняется следующим образом:
- Нужно переключиться на консоль управления QEMU, для этого нажать Ctrl-Alt-2
- Посмотреть информацию о USB-устройствах в хост-системе
- Выполнить подключение
- Поработать с устройством
- Отключить его
info usbhost usb_add host:... info usb usb_del host:...
Сейчас работа с USB в QEMU реализована в синхронном режиме, поэтому как только вы подключаете USB-устройство система чрезвычайно сильно замедляется, настолько что работать с ней больше практически невозможно. После отключения USB-устройства производительность системы востанавливается. |
[править] Экспорт USB-накопителей как блочных устройств Подключение USB-дисков (flash, внешние жёсткие диски)
- Этот способ хорошо подходит для случая, когда допускается, чтобы USB-устройство виделось в гостевом домене как обычное блочное
Если достаточно, чтобы USB-устройство в гостевом домене было видно как обычное блочное устройство, тогда можно его так и подключить. В домене 0 это устройство будет обслуживаться модулем usb-storage, а полученное блочное устройство будет экспортироваться в гостевой домен.
Подключение блочного устройства можно осуществить следующим образом:
%# xm block-attach <domU> <real_dev> <virt_dev> <mode>
Где:
- <domU> - номер виртуального домена или его имя (получить можно, выполнив "xm list");
- <real_dev> - блочное устройство в хост-системе (например, первый раздел flash-drive подключился как /dev/sdc1. В этом случае <real_dev> будет выглядеть так "phy:sdc1");
- <virt_dev> - блочное устройство в гостевой системе (для рассмотренного примера будет выглядеть как "sdc1"). Нужно проследить, чтобы не было конфликтов с уже существующими в гостевой системе устройствами;
- <mode> - режим работы ("r" - только чтение, "w" - чтение и запись).
Подробнее:
[править] Доступ к USB-устройству по сети
Можно организовать доступ к USB-устройству по сети. Для этого необходим USB-сервер (аппаратный или программный) и USB-клиент (программный). Последний фактически представлен специальным драйвером для операционной системы.
Существуют программные реализации USB-клиентов и USB-серверов для Windows (коммерческие) и для Linux (свободные).
Примеры аппаратных решений:
- http://www.belkin.com/networkusbhub/
- http://www.home.agilent.com/agilent/facet.jspx?k=E5813A
- http://www.digi.com/products/usb/anywhereusb.jsp
[править] Дополнительная информация
- USB over Network
- USB 2.0 Server
- WinXP under Qemu - USB Problems — The QEMU forum
- USB Redirector
|
---|