Дата и время публикации: Дата и время модификации:
Автор Константин Гусев с моими небольшими правками .
Назначение и использование
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
user@home:~$ sudoedit /etc/modules . . . vhci-hcd usbip-core usbip-host . . .
На сервере запустить службу usbipd, как показано в дампе 2.4
Дамп 2.4
$ sudo usbipd -D
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