Показаны сообщения с ярлыком usb. Показать все сообщения
Показаны сообщения с ярлыком usb. Показать все сообщения

Xen: проброс USB устройств

Xen умеет пробрасывать USB-устройства (по отдельности) в гостевые непривилегированные домены. Для этого используется механизм, называемый PVUSB (подозреваю, что сокращение от Para-Virtualized USB), концептуально состояний из модулей usbbk (Xen USB backend driver) и xen_hcd (Xen USB Virtual Host Controller driver). Соответственно, первый модуль съедает устройство в dom0, делая его недоступным для других драйверов, а все URB отправляет через гипервизор в нужный выбранный домен, где их получает перавиртуальный контроллер. Утверждается, что потеря производительности минимальна.

Вся конструкция управляется несколькими командами. Посмотреть, какие устройства доступны:
# xm usb-list-assignable-devices
4-2          : ID 067b:2303 Prolific Technology Inc. USB-Serial Controller
Создать в домене паравиртуальный USB хост контроллер: xm usb-hc-create Domain UsbVer PortNum, где параметры — название домена, версия USB (поддерживаются 1 и 2) и количество USB-портов. После этого, в гостевом домене с помощью lsusb видно появившийся контроллер. Для удаления есть обратная команда xm usb-hc-destroy

Для присваивания устройства есть команда xm usb-attach Domain HostNum PortNum Device, где параметры — название домена, номер хост контроллера (их можно хоть пачку создать), номер порта на виртуальном контроллере, первая колонка выдачи usb-list-assignable-devices. Обратная команда — xm usb-destroy. При этом, в dom0 устройство пропадет на глазах у изумленного драйвера:
[12129.803899] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[12129.803938] pl2303 4-2:1.0: device disconnected
но появится в гостевом домене:
# lsusb
Bus 001 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Важное замечание. Если в гостевом домене ничего не появилось, кроме записей в dmesg:
[12332.892117] usb 1-1: new full-speed USB device number 70 using vusb
[12332.892126] usb 1-1: parent hub has no TT
то скорее всего, устройство не поддерживает USB 2.0, к которому его прицепили, нужно сделать другой контроллер с правильным параметром UsbVer.

Кроме того, устройство можно прибить гвоздями в конфигурационном файле домена:
vusb=['usbver=1, numports=4, port_1=4-2']
Список литературы:

v4l (video for linux) 1.0

Это пост для миграции с первой версии v4l API на v4l2.

Если правильно понимаю, поддержка первой версии была окончательно удалена этим коммитом. Где-то между ядром 2.6.36 и 2.6.37.

VirtualBox 4.0 USB

С выпуском четвертой версии виртуальной машины VirtualBox среди прочих изменений в стала доступна возможность подключения USB-устройств в гостевой ОС. Вообще говоря, такая возможность была раньше и в проприетарной версии.

При попытке воспользоваться этой возможностью может обнаружиться примерно такой симптом: в списке устройств все устройства подключенные к физической машине есть, но они "неактивные" и галочки не горят. Соответственно, в гостевой ОС их не видно.

Существуют инструкции, в том числе и на официальном сайте VirtualBox, где объясняется как монтировать /proc/bus/usb, чтобы все заработало. Так вот, эта инструкция только для относительно старых ядер, например в openSUSE 11.2 монтировать ничего не нужно.

Для активации поддержки USB следует: во-первых, убедиться что существует группа vboxusers и нужные пользователи включены в неё, во-вторых, открыть /etc/udev/rules.d/60-vboxdrv.rules и активировать там соответствующие настройки:

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"
#these two lines give access permission to vboxusers to properly work with usb nodes, this could be security risk (bnc#664520) !!
SUBSYSTEM=="usb_device", ATTR{devnum}=="?*", ATTR{busnum}=="?*",NAME="vboxusb/$attr{busnum}/$attr{devnum}", GROUP="vboxusers"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{devnum}=="?*", ATTR{busnum}=="?*",NAME="vboxusb/$attr{busnum}/$attr{devnum}", GROUP="vboxusers"

После этого надо чтобы настройки вступили в силу, кто не знает как этого добиться — может просто перезагрузиться. После этого все должно работать. Не поддавайтесь на устаревшие инструкции.

Борьба с Video 4 Linux 2

Сегодня я боролся с pwc драйвером, вернее с интерфейсом Video 4 Linux 2. Поскольку дома из устройств работающих через v4l оказалась только одна камера, не считая ноутбучной, и не считая цифрового фотоаппарата 2000 (!) года покупки, использовался образец Philips SPC 900NC вместе с драйвером pwc из ядра 2.6.18 и pwc 10.0.12-rc1 с ядром 2.6.8.

Пара полезных ссылок, которые должен запомнить каждый:


Теперь имею представление, как этим интерфейсом пользоваться. Написал простенькую программку, которая тут-же гордо сообщила:

Camera capables:
Driver: pwc
Device: Philips SPC 900NC webcam
Bus: usb-0000:00:1d.2-2
Kernel: 10.0.12
Capables:
* capture
* readwrite
* streaming
Formats:
0 (1) Raw Philips Webcam [843274064]
1 (0) 4:2:0, planar, Y-Cb-Cr [842093913]
Current: 640x480 460800 842093913


или с другой камерой, Philips 840K:

Camera capables:
Driver: pwc
Device: Philips 740 webcam
Bus: usb-0000:00:10.0-1
Kernel: 10.0.12
Capables:
* capture
* readwrite
* streaming
Formats:
0 (1) Raw Philips Webcam [843274064]
1 (0) 4:2:0, planar, Y-Cb-Cr [842093913]
Current: 640x480 460800 842093913


А вот дальше началось самое интересное, поскольку опытным путём было выяснено, что VIDIOC_STREAMON и VIDIOC_STREAMOFF останавливает ( или запускает соответственно ) передачу и освобождают канал:

B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0


Этот факт особенно радостен, т.к. например camsource работает так, что драйвер pwc дропает неиспользованные кадры, а канал постоянно занят. Поэтому при подсоединении двух камер к компьютеру на базе Vortex86 обнаружилось, что usb-хост тянет передачу с двух камер в формате 640x480 только при максимальной компрессии, которая сказывается на качестве изображения. Т.е. это открываешь девайс, потом сцапал кадр и затаился на минуту, сцапал ещё...

В то же время, к сожалению, действие флага PWC_FPS_SNAPSHOT не было вообще обнаружено.

p.s. Перечитал этот бред и понял что с согласованием оборотов русского языка у меня действительно плохо.