Установка и использование USB/IP на клиенте
Кратко
Краткое руководство по загрузке модуля vhci-hcd, установке клиента usbip, подключению и отключению удалённых USB-устройств. Включены команды, примеры вывода, чек-листы и советы по устранению неполадок.
Важно: все команды выполняются с правами root на соответствующих хостах (client1 — клиент, server1 — сервер).
Содержание
- Загрузка модуля vhci-hcd
- Установка usbip на клиенте
- Подключение удалённого USB-устройства
- Отключение удалённого USB-устройства
- Совет по устранению неполадок
- Чек-листы и критерии приёмки
- Ссылки
Загрузка модуля vhci-hcd
На клиенте (client1) сначала загружаем модуль ядра vhci-hcd:
modprobe vhci-hcdПроверим, загрузился ли модуль:
lsmod | grep vhci_hcdОжидаемый вывод похож на этот:
[root@client1 administrator]# lsmod | grep vhci_hcd
vhci_hcd 22840 0
usbip_common_mod 22168 1 vhci_hcd
usbcore 219188 2 vhci_hcd
[root@client1 administrator]#Чтобы модуль автоматически загружался при загрузке системы, добавьте его в /etc/modprobe.preload:
vi /etc/modprobe.preload[...]
vhci-hcdУстановка usbip на клиенте
Шаги установки клиента usbip совпадают со сторонами сервера. На Mandriva/ПК-совместимых дистрибутивах это может выглядеть так:
urpmi wget flex gcc gcc-c++ libsysfs-devel libglib2.0-develcd /tmp
wget http://downloads.sourceforge.net/project/usbip/usbip/0.1.7/usbip-0.1.7.tar.gz?use_mirror=kent
tar xvfz usbip-0.1.7.tar.gz
cd usbip-0.1.7/src/
./autogen.sh
./configure
make
make installПримечание по файлу usb.ids: usbip ожидает файл со списком известных устройств в /usr/share/hwdata, но в Mandriva 2010.0 он расположен в /usr/share/usb.ids. Создаём символическую ссылку:
mkdir /usr/share/hwdata
ln -sf /usr/share/usb.ids /usr/share/hwdata/Подключение удалённого USB-устройства
На клиенте запрашиваем список доступных устройств у сервера (192.168.0.100 — IP сервера usbip):
usbip -l 192.168.0.100В выводе должна быть флешка SanDisk (BUSID 1-5):
[root@client1 src]# usbip -l 192.168.0.100
- 192.168.0.100
1-5: SanDisk Corp. : Cruzer Micro Flash Drive (0781:5151)
: /sys/devices/pci0000:00/0000:00:02.1/usb1/1-5
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
[root@client1 src]#Подключаем устройство к клиенту, используя BUSID 1-5:
usbip -a 192.168.0.100 1-5Пример вывода команды:
[root@client1 src]# usbip -a 192.168.0.100 1-5
8 ports availableport 0 attached
[root@client1 src]#Проверяем список USB-устройств локально:
lsusbОжидается запись удалённого устройства:
[root@client1 src]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 023: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
[root@client1 src]#Теперь с устройством можно работать как с локальным: монтировать, форматировать, читать/писать.
Отключение удалённого USB-устройства
На клиенте сначала определяем, какой порт использует устройство:
usbip --portПример длинного вывода (в нём видно, что устройство использует порт 00):
[root@client1 src]# usbip --port
8 ports available
Port 00: at High Speed(480Mbps)
SanDisk Corp. : Cruzer Micro Flash Drive (0781:5151)
1-1 -> usbip://192.168.0.100:3240/1-5 (remote devid 00010003 (bus/dev 001/003))
1-1:1.0 used by usb-storage
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/target5:0:0/5:0:0:0/block/sdb/device
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/target5:0:0:0/bsg/5:0:0:0/device
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/target5:0:0:0/scsi_device/5:0:0:0/device
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/target5:0:0:0/scsi_disk/5:0:0:0/device
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/target5:0:0:0/scsi_generic/sg2/device
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/scsi_host/host5/device
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host5/target5:0:0/5:0:0:0/block/sdb/device
Port 01:
Port 02:
Port 03:
Port 04:
Port 05:
Port 06:
Port 07:
[root@client1 src]# Отсоединяем устройство по номеру порта (в примере — 00):
usbip -d 00Ожидаемый вывод:
[root@client1 src]# usbip -d 00
8 ports availableport 0 detached
[root@client1 src]#На сервере можно вернуть устройство в локальную систему, используя BUSID 1-5. Ключ –other привязывает устройство к локальному драйверу, делая его недоступным по сети:
На сервере (server1):
bind_driver --other 1-5Пример вывода:
[root@server1 administrator]# bind_driver --other 1-5
(process:3484): DEBUG: write "del 1-5" to /sys/bus/usb/drivers/usbip/match_busid
Message: bind 1-5 to other drivers than usbip, complete!
[root@server1 administrator]#Вернёмся на клиент и проверим lsusb — удалённого устройства в списке быть не должно:
[root@client1 src]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
[root@client1 src]#Критерии приёмки
- Модуль vhci-hcd загружен и виден в lsmod.
- Команда usbip -l показывает нужный BUSID на сервере.
- После usbip -a в lsusb клиента появляется запись удалённого устройства.
- После usbip -d и bind_driver –other устройство исчезает с клиента и доступно локально на сервере.
Чек-лист для администратора клиента
- Загрузить vhci-hcd: modprobe vhci-hcd
- Установить пакет usbip (или собрать из исходников)
- Создать /usr/share/hwdata -> /usr/share/usb.ids, если требуется
- Подключить usbip -a
- Проверить lsusb и /proc/ или /sys для целостности устройства
Чек-лист для администратора сервера
- Убедиться, что usbip daemon запущен и устройство экспортировано
- Проверить BUSID через usbip list
- При необходимости вернуть устройство локально: bind_driver –other
Советы по устранению неполадок
- Если usbip -l не показывает устройства: проверьте запущен ли usbip daemon на сервере и доступен ли порт 3240 по сети.
- Если порт не прикрепляется (attach не удаётся): проверьте, не занято ли устройство локально на сервере и не мешают ли права доступа.
- Если lsusb не показывает устройство после attach: проверьте вывод dmesg и содержимое /sys/devices/platform/vhci_hcd/.
- При проблемах со сборкой — убедитесь, что установлены dev-пакеты (libsysfs-devel, libglib2.0-devel) и используйте совместимую версию ядра.
Короткий глоссарий
- BUSID — идентификатор USB-шины и порта на сервере (например, 1-5).
- vhci-hcd — виртуальный хост-контроллер USB для клиента.
- bind_driver –other — команда для привязки устройства к локальному драйверу на сервере.
Команды — шпаргалка
- Загрузить модуль: modprobe vhci-hcd
- Список модулей: lsmod | grep vhci_hcd
- Список устройств на сервере: usbip -l
- Подключить устройство на клиенте: usbip -a
- Показать используемые порты: usbip –port
- Отключить устройство по порту: usbip -d
- Привязать устройство к локальному драйверу на сервере: bind_driver –other
Дополнительно: когда это может не сработать
- Если между клиентом и сервером есть NAT или фильтрация портов, tcp-порт 3240 должен быть доступен.
- Аппаратные устройства с DRM или специализированными протоколами могут не работать корректно через USB/IP.
Ссылки
- USB/IP Project: http://usbip.sourceforge.net/
- Mandriva: http://www.mandriva.com/
Подводя итоги, последовательное выполнение шагов загрузки модуля, установки клиента, прикрепления BUSID и верификации через lsusb даёт рабочий сценарий удалённого использования USB-устройств через сеть.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента