Постановка задачи
Необходимо подключить устройство, управляемое через USB-порт, к компьютеру, который отдалён от этого устройства. Или другими словами: “необходимо установить и запустить сервер USB-портов”.
На стороне сервера необходимо установить ПО, которое будет предоставлять доступ к USB-порту по локальной сети. На стороне клиента, следовательно, должно быть установлено ПО, которое способно будет соединиться с сервером и вернуть своей операционной системе виртуальный USB-порт, к которому, в свою очередь, любая из требуемых программ сможет свободно подключаться как к самому настоящему USB-порту.
Установка ПО
В качестве подходящего ПО для решения задачи выбран проект usbip (http://sourceforge.net/projects/usbip/). Для серверной части необходима Linux-машина. Пример установки серверной части (ArchLinux):
[orca@blizzard ~]$ sudo pacman -S usbip |
Клиентская часть под MS Windows здесь: http://sourceforge.net/projects/usbip/files/usbip_windows. С ней иногда возникают проблемы, поэтому рекомендуется загрузить и альтернативный вариант сборки (http://files.p1m.nl/usbip/).
Эксперимент
Вначале необходимо подключить требуемое устройство к серверу (например, веб-камеру) и убедиться, что оно работает нормально:
[orca@blizzard ~]$ dmesg
...
[161152.910976] usb 1-1.1: new high-speed USB device number 5 using ehci-pci
[161153.266348] media: Linux media interface: v0.10
[161153.281732] Linux video capture interface: v2.00
[161153.304130] uvcvideo: Found UVC 1.00 device USB2.0 Camera (1e4e:0102)
[161153.311185] input: USB2.0 Camera as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input12
[161153.311298] usbcore: registered new interface driver uvcvideo
[161153.311300] USB Video Class driver (1.1.1)
[orca@blizzard ~]$ sudo usbip list -l
- busid 3-1.1 (1e4e:0102)
Cubeternet : GL-UPC822 UVC WebCam (1e4e:0102)
3-1.1:1.0 -> uvcvideo
3-1.1:1.1 -> uvcvideo
|
Загрузить необходимые модули, запустить демон “usbip” и привязать к нему устройство из предыдущего списка:
[orca@blizzard ~]$ sudo modprobe usbip-core [orca@blizzard ~]$ sudo modprobe usbip-host [orca@blizzard ~]$ sudo usbipd -D [orca@blizzard ~]$ sudo usbip bind --busid=3-1.1 bind device on busid 3-1.1: complete |
| Замечание | На начальном этапе рекомендуется запустить демон в режиме отладки: “sudo usbipd -d” |
Опросить демон “usbip”:
[orca@blizzard ~]$ usbip list -r 10.0.0.14
Exportable USB devices
======================
- 10.0.0.14
3-1.1: Cubeternet : GL-UPC822 UVC WebCam (1e4e:0102)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1
: Miscellaneous Device / ? / Interface Association (ef/02/01)
: 0 - Video / Video Control / unknown protocol (0e/01/00)
: 1 - Video / Video Streaming / unknown protocol (0e/02/00)
|
| Замечание | Здесь и далее, в примерах, адрес 10.0.0.14 это адрес сервера с запущенным демоном “usbip” |
Перейти на сторону клиента. Проверить связь программой “telnet” подключением к порту 3240.
Распаковать архив (usbip_windows_v0.2.0.0_signed.zip). Установить драйвер устройства “USB/IP Enumerator”:
- Control Panel → Add Hardware → Next
- Yes, I have already connected the hardware → Next
- Add a new hardware device → Next
- Install the hardware that I manually select from a list(Advanced) → Next
- System Devices → Next
- Have Disk → Browse → выбрать директорию с распакованным архивом → OK
- USB/IP Enumerator → Next
- The wizard is ready to install your hardware → Next → Finish
Открыть командную строку, перейти в директорию с распакованным архивом, выполнить команды:
D:\Install\usbip_win>usbip.exe -l 10.0.0.14
usbip for windows ($Id$)
- 10.0.0.14
3-1.1: unknown vendor : unknown product (1e4e:0102)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1
: unknown class / unknown subclass / unknown protocol (ef/02/01)
: 0 - unknown class / unknown subclass / unknown protocol (0e/01/00)
: 1 - unknown class / unknown subclass / unknown protocol (0e/02/00)
D:\Install\usbip_win>usbip.exe -a 10.0.0.14 3-1.1
new usb device attached to usbvbus port 1
|
| Важно | Если программа usbip.exe вернёт ошибку, то попробовать с альтернативными вариантами её сборки (http://files.p1m.nl/usbip/), например, с usbip_windows_selfbuild_201.zip. Драйвер устройства “USB/IP Enumerator” из официальной сборки заменять не нужно. |
Признаком того, что всё работает правильно является появление нового устройства в диспетчере устройств (USB Video Device).
Далее остаётся только проверить работу этого устройства. Для приведённого примера (веб-камера), использовался видео проигрыватель VLC (переносная версия):
- Запустить VLCPortable
- Медиа → Открыть устройство захвата… → Название видео-устройства: USB Video Device → [Воспроизвести]
- В окне проигрывателя VLC должно появиться изображение с прикреплённой по сети веб-камеры
Система поддерживает подключение нескольких устройств.
На стороне сервера подключить ещё одно USB-устройство (например Flash-диск), опросить демон “usbip” локально, прикрепить устройство, проверить список предоставляемых по сети USB-устройств:
[orca@blizzard ~]$ usbip list -r 10.0.0.14 <1>
Exportable USB devices
======================
- 10.0.0.14
3-1.1: Cubeternet : GL-UPC822 UVC WebCam (1e4e:0102)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1
: Miscellaneous Device / ? / Interface Association (ef/02/01)
: 0 - Video / Video Control / unknown protocol (0e/01/00)
: 1 - Video / Video Streaming / unknown protocol (0e/02/00)
[orca@blizzard ~]$ usbip list -l <2>
...
- busid 3-1.2 (13fe:3600)
Kingston Technology Company Inc. : unknown product (13fe:3600)
3-1.2:1.0 -> usbip-host
[orca@blizzard ~]$ sudo usbip bind --busid=3-1.2 <3>
[orca@blizzard ~]$ usbip list -r 10.0.0.14 <4>
Exportable USB devices
======================
- 10.0.0.14
3-1.1: Cubeternet : GL-UPC822 UVC WebCam (1e4e:0102)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1
: Miscellaneous Device / ? / Interface Association (ef/02/01)
: 0 - Video / Video Control / unknown protocol (0e/01/00)
: 1 - Video / Video Streaming / unknown protocol (0e/02/00)
3-1.2: Kingston Technology Company Inc. : unknown product (13fe:3600)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.2
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk-Only (08/06/50)
|
- Контрольный опрос предоставляемых по сети USB-устройств (пока что только одна веб-камера)
- Локальный опрос; запомнить адрес подключенного Flash-диска
- Прикрепление Flash-диска
- Список предоставляемых по сети USB-устройств изменился
Перейти на сторону клиента. Открыть новое окно командной строки, перейти в директорию с программой usbip.exe:
D:\Install\usbip_win>usbip.exe -p <1>
max used port:1
port 1: used
D:\Install\usbip_win>usbip.exe -l 10.0.0.14 <2>
- 10.0.0.14
3-1.1: unknown vendor : unknown product (1e4e:0102)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1
: Miscellaneous Device / ? / Interface Association (ef/02/01)
: 0 - Video / Video Control / unknown protocol (0e/01/00)
: 1 - Video / Video Streaming / unknown protocol (0e/02/00)
3-1.2: Kingston Technology Company Inc. : unknown product (13fe:3600)
: /sys/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.2
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
D:\Install\usbip_win>usbip.exe -a 10.0.0.14 3-1.2 <3>
new usb device attached to usbvbus port 2
D:\Install\usbip_win>usbip.exe -p <4>
max used port:2
port 1: used
port 2: used
|
- Опрос действующих соединений. Порт №1 используется веб-камерой
- Опрос доступных устройств
- Подключение устройства
- Повторный опрос действующих соединений (в новом окне командной строки)
