Постановка задачи
Необходимо подключить устройство, управляемое через 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 используется веб-камерой
- Опрос доступных устройств
- Подключение устройства
- Повторный опрос действующих соединений (в новом окне командной строки)