× К оглавлению На главную Об авторе

Дата и время публикации:
Дата и время модификации:

 


Автор Константин Гусев с моими небольшими правками .


 

Назначение и использование


1. Назначение

Проброс портов USB необходим для удалённой работы c устройствами USB посредством сети IP, который осуществляется с использованием протокола USB/IP.

Указанный протокол реализуется традиционно по клиент/серверной схеме взаимодействия, при которой клиентом является машина используемая устройства USB, предоставляемые сервером через вычислительную сеть. При этом устройством USB может быть либо аппаратное средство, подключенное к серверу, либо программное, созданное на нем с использованием подсистемы USB-гаджетов.

В данном случае будет осуществляться проброс устройства USB, являющееся программатором JTAG и используемое удаленно программой Microchip sam-ba.

2. Использование

2.1 Установка необходимых пакетов программ

Для возможности проброса портов USB установить необходимые программные пакеты на сервер и клиент, как показано в дампе 2.1

дамп 2.1

$ sudo apt install usbip

Версии пакетов, установленные на сервер и клиент, должны совпадать. В противном случае скомпилировать пакет для одной из машин из исходных файлов.

2.2 Настройка проброса порта на сервере

Определить номера портов USB, которые нужно пробросить, как показано в дампе 2.2

дамп 2.2

$ sudo usbip list -l
 - busid 3-1 (093a:2510)
   Pixart Imaging, Inc. : Optical Mouse (093a:2510)

 - busid 3-3.1 (1366:0105)
   SEGGER : unknown product (1366:0105)

 - busid 3-3.2 (10c4:ea60)
   Cygnal Integrated Products, Inc. : CP2102/CP2109 UART Bridge Controller [CP210x family] (10c4:ea60)

 - busid 3-3.3 (046d:c31c)
   Logitech, Inc. : Keyboard K120 (046d:c31c)

 - busid 3-3.4 (0bda:8153)
   Realtek Semiconductor Corp. : RTL8153 Gigabit Ethernet Adapter (0bda:8153)

 - busid 1-1.1 (8087:07da)
   Intel Corp. : unknown product (8087:07da)

 - busid 1-1.2 (13d3:5195)
   IMC Networks : unknown product (13d3:5195)

 - busid 1-1.6 (138a:0008)
   Validity Sensors, Inc. : VFS300 Fingerprint Reader (138a:0008)

 - busid 2-1.8 (058f:9540)
   Alcor Micro Corp. : AU9540 Smartcard Reader (058f:9540)

Как видно из дампа 2.2, проброс устройства имеют номера 3-3.1 и 3-3.2 (контроллер последовательного порта). Далее описан процесс проброса порта USB для программатора. При этом проброс для контроллера последовательного порта происходит аналогично.

Добавить в ядро необходимые модули (входят в пакет usbip), дампа 2.3

Дамп 2.3

sudo modprobe vhci-hcd
sudo modprobe usbip-core
sudo modprobe usbip-host
Примечание. В файле /etc/modules, как на клиентской, так и на серверной стороне, перечисляем все модули, чтобы не выполнять показанные в дампе 2.3 операции их подключения каждый раз после инициализации системы:
user@home:~$ sudoedit /etc/modules
 . . .
vhci-hcd
usbip-core
usbip-host  
 . . .

На сервере запустить службу usbipd, как показано в дампе 2.4

Дамп 2.4

$ sudo usbipd -D
Примечания. В случае, если используемый службой usbipd, порт закрыт, и необходимо задать правило для брандмауэра iptables, как показано ниже.
sudo iptables -I INPUT -p tcp -m tcp --dport 3240 -j ACCEPT

На сервере назначить порт USB, к которому подключено устройство, пробрасываемое. Подключённое к нему устройство станет недоступным для работы со стороны сервера, как показано в дампе 2.5

Дамп 2.5

$ sudo usbip bind -b 3-3.1
usbip: info: bind device on busid 3-3.1: complete

2.3 Подключение удалённого порта USB

На клиенте проверить доступность переназначенного порта на сервере, дампе 2.6

Дамп 2.6

$ sudo usbip list -r 192.168.0.82
Exportable USB devices
======================
 - 192.168.0.82
      3-3.1: SEGGER : unknown product (1366:0105)
           : /sys/devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3.1
           : Miscellaneous Device / ? / Interface Association (ef/02/01)

Далее, на нем же, примонтировать удалённый порт USB и проверить его доступность, как показано в дампе 2.7

Дамп 2.7

root@debian-gk:~# usbip attach -r 192.168.0.82 -b 3-3.1
root@debian-gk:~# usbip port
Imported USB devices
====================
Port 00:  at Full Speed(12Mbps)
       SEGGER : unknown product (1366:0105)
       5-1 -> usbip://192.168.0.82:3240/3-3.1
           -> remote bus/dev 003/024
root@debian-gk:~# lsusb 
Bus 020 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 019 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 018 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 017 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 015 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 014 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 013 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 012 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 011 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 010 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 005: ID 1366:0105 SEGGER 
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 058f:9540 Alcor Micro Corp. AU9540 Smartcard Reader
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 005: ID 138a:0008 Validity Sensors, Inc. VFS300 Fingerprint Reader
Bus 003 Device 006: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader
Bus 003 Device 004: ID 13d3:5195 IMC Networks 
Bus 003 Device 003: ID 8087:07da Intel Corp. 
Bus 003 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Устройство смонтировано и доступно клиенту, как номер виртуального порта vhci_hcd(00) понадобится при размонтировании удалённого порта USB.

2.4 Отключение удалённого порта USB

Определить номер виртуального порта vhci_hcd, как показано в дампе 2.8

Дамп 2.8

$ sudo usbip port
Imported USB devices
====================
Port 00:  at Full Speed(12Mbps)
       SEGGER : unknown product (1366:0105)
       5-1 -> usbip://192.168.0.82:3240/3-3.1
           -> remote bus/dev 003/024

Отключить удалённый порт, как показано в дампе 2.9

Дамп 2.9

$ usbip detach -p 0
usbip: info: Port 0 is now detached

2.5 Сброс проброса порта на сервере

Отключение проброса на сервере производится, как показано в дампе 2.10

Дамп 2.10

$ usbip unbind -b 3-3.1
usbip: info: unbind device on busid 3-3.1: complete

3. Библиография

3.1 Microchip SAM-BA

3.2 Доступ к USB-устройству по сети.

3.3 Форум русскоязычного сообщества Ubuntu. Тема USBIP

3.4 USB/IP protocol on the Github

3.5 LinuxQuestions.org. Reload this Page usbip - bind completed successfully, but it really didn't