USB в Xen

Материал из Xgu.ru

Перейти к: навигация, поиск
Короткий URL: xen/usb
Об использовании USB в QEMU читайте на странице QEMU.


Существует несколько способов получить доступ к USB-устройству из гостевого домена Xen:

  1. Для HVM-доменов: Посредством эмуляционного слоя QEMU (основной способ);
  2. Как к блочному устройству (подходит не для всех устройств);
  3. Выполнив проброску PCI-устройства USB-контроллер внутрь домена;
  4. По сети.

Содержание

[править] Подключение 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

Подключение устройства в работающую систему выполняется следующим образом:

  1. Нужно переключиться на консоль управления QEMU, для этого нажать Ctrl-Alt-2
  2. Посмотреть информацию о USB-устройствах в хост-системе
  3. Выполнить подключение
  4. Поработать с устройством
  5. Отключить его
info usbhost
usb_add host:...
info usb
usb_del host:...

Icon-caution.gif

Сейчас работа с 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 (свободные).

Примеры аппаратных решений:


[править] Дополнительная информация

Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure
Источник — «http://xgu.ru:81/wiki/USB_%D0%B2_Xen»