Есть много причин использования физически удаленных USB устройств,
именно устройств, а не их ресурсов или данных передаваемых с них.То есть, после прочтения и настройки данного ПО, вы сможете подключать флешки, камеры, принтеры, и т.п., находящиеся скажем в Австралии или дома, находясь на работе.
О наличии или отсутствии модулей поддержки USB_IP в определенных дистрибутивах ничего сказать немогу, но вы сами можете прекрасно проверить командой:
# modprobe -l | grep usbip
/lib/modules/2.6.31.2/kernel/drivers/staging/usbip/vhci-hcd.ko
/lib/modules/2.6.31.2/kernel/drivers/staging/usbip/usbip.ko
Если появилось, что-то вроде этого, то переходим ко второй части, нет, - поехали дальше.
++ 1. Установка поддержки USB/IP в ядре.
Для работы необходимо ядро версии не менее чем 2.6.20, после версии 2.6.28 этот проект перенесён в основную ветку ядра, но в раздел staging (по-русски - "почти работающие" :))
Итак, если версия 2.6.28 и больше, запускаем конфигурацию ядра:
# make menuconfig
Идем в раздел:
Device Drivers --->
Staging drivers --->
И включаем опции: (лучше как модули)
<M> USB IP support (EXPERIMENTAL)
<M> USB IP client driver
<M> USB IP host driver
Сохраняем конфигурацию, компилируем и устанавливаем ядро.
# make && make modules_install && make install;
++ 2. Установка утилит пользовательского режима.
Для управлением и подключением наших устройств необходимы утилиты пользовательского режима и некоторые библиотеки, а именно:
- sysfsutils >= 2.0.0 sysfsutils library
А для компиляции:
- libwrap0-dev tcp wrapper library (можно и без неё)
- gcc >= 4.0
- libglib2.0-dev >= 2.6.0
- libtool, automake >= 1.9, autoconf >= 2.5.0, pkg-config
Скачиваем архив с Sourceforge (я бы этого не делал) http://sourceforge.net/projects/usbip/files/
Либо последние версии, через SVN:
# cd /usr/src/
# svn co https://usbip.svn.sourceforge.net/svnroot/usbip usbip
Переходим в каталог с утилитами, за запускаем autogen.sh,
после чего должен появится configure
# cd usbip/linux/truck/src/
# ./autogen.sh
configure лучше указать где находится файл описания производителей USB устройств - usb.ids, если этого не сделать, то ничего страшного, он установит свой в /usr/local/share/usbip/usb.ids :)
# ./configure --with-usbids-dir=/usr/share
# make
# make install
У вас должны появится три утилитки - usbip, usbipd, usbip_bind_driver и две библиотеки - libusbip.so.0.0.1 и libusbip.a
++ 3. Подключение и работа.
Как при любом взаимодействии, так и у нас необходимы как минимум два индивида. :)
В USB/IP они подразделяются на клиентскую и серверную части процесса работы.
SERVER - это компьютер с физическим, необходимым нам устройством.
CLIENT - так же, компьютер, возможно даже тот же, где работает сервер (сейчас всех запутаю).
++ 3.1 Серверная часть.
И так, что б получит доступ по сети, скажем к флешке на компьютере с именем [SERVER], необходимо:
[SERVER]
1. Физически подключить устройство.
2. Загрузить модули:
# modprobe -v usbip_common_mod
# modprobe -v usbip
3. Запустить сервер сетевых подключений
# usbipd -D
Должен открыться TCP порт 3240, и находиться в состоянии LISTEN
# netstat -ltn;
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN
4. Вывести список устройств возможных для подключения
# usbip_bind_driver --list
List USB devices
- busid 2-1 (051d:0002)
2-1:1.0 -> usbhid
- busid 1-8 (058f:6387)
1-8:1.0 -> usb-storage
5. И наконец, сделать устройство доступным для клиентов.
# usbip_bind_driver --usbip 1-8
usbip_bind_driver --usbip 1-8
** (process:12829): DEBUG: 1-8:1.0 -> usb-storage
** (process:12829): DEBUG: unbinding interface
** (process:12829): DEBUG: write "add 1-8" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-8 to usbip, complete!
++ 3.2 Клиентская часть.
[CLIENT]
1. Устанавливаем модули
# modprobe -v usbip_common_mod
# modprobe -v vhci-hcd
Проверяем dmesg
# dmesg
vhci_hcd vhci_hcd: USB/IP Virtual Host Contoroller
vhci_hcd vhci_hcd: new USB bus registered, assigned bus number 3
usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb3: Product: USB/IP Virtual Host Contoroller
usb usb3: Manufacturer: Linux 2.6.31.2 vhci_hcd
usb usb3: SerialNumber: vhci_hcd
Всё в порядке, идем дальше...
2. Выводим список устройств доступных на сервере
# usbip --list 192.168.0.1
- 192.168.0.1
1-8: Alcor Micro Corp. : Transcend JetFlash Flash Drive (058f:6387)
: /sys/devices/pci0000:00/0000:00:02.1/usb1/1-8
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
Чудненько, мы видим удалённую флешку....
3. И подключаем её как будто бы локальную
# usbip --attach 192.168.0.1 1-8
Проверяем состояние
# usbip --port
# lsusb
# dmesg
Если у Вас работает какая либо система автоподключения, наверно флещка уже куда-то подмонтировалась.
Далее можно производить любые действия, так как вы работаете с обычными USB устройствами, - снимать, сканировать, печатать.
4. Отключение устроиства на клиенте
# usbip --detach 1-8
P.S. Драйвер находиться в стадии глубокого эксперимента, так что ошибок очень много. Так например временное пропадание соединения, для TCP/IP явление нормальное, а вот временное пропадание USB устройства, приводит к его уничтожению из списка устройств. А после прохождения таймаута в TCP, устройство вдруг возвращается... :)
В VHCI драйвере это конечно компенсируют, но так же есть пределы таймаутов. Так что, хорошо настроенная сеть, пускай даже и медленная, залог успеха. Про отключение режимов управлением питанием, понижение частоты, QoS, молчу - просто обязательно!
URL:
Обсуждается: http://www.opennet.dev/tips/info/2189.shtml