The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Подключение удалённых USB устройств в Linux
Есть много причин использования физически удаленных 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. Выводим список устройств доступных на сервере, у которого адрес 192.168.0.1

   # 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, молчу - просто обязательно!
 
06.10.2009 , Автор: pavlinux
Ключи: usb, linux, kernel / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Поддержка аппаратного обеспечения

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, pavlinux (ok), 16:16, 06/10/2009 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    Чёй-то я про Австралию вспомнил :-/
     
  • 1.2, upyx (ok), 04:58, 07/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    А USB-hub со всеми подключенными к нему устройствами одним махом пробросить можно? :)
     
     
  • 2.11, pavlinux (ok), 05:57, 09/10/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Хаба небыло никогда, не прикалывался...
     

  • 1.3, defiso (?), 11:15, 07/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    А авторизация какая-нибудь предусмотрена?
     
     
  • 2.5, фноним (?), 15:09, 07/10/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    >А авторизация какая-нибудь предусмотрена?

    с помощью stunnel прикрутить или inetd

     

  • 1.6, demimurych (?), 23:11, 07/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    >> Есть много причин использования физически удаленных USB устройств,

    именно устройств, а не их ресурсов или данных передаваемых с них.

    и не одной не названо

     
     
  • 2.10, pavlinux (ok), 05:56, 09/10/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    Виртуальные машины.
    Удалённые столы: - Видео в режим потока, а клаву и мышь отдельно.
    - Петрович, у мня тонер конился, какой у тя АйПишнег??? Пушай демона, дай начепятую!!!
    - Алё, Жуна, вставь флешку в комп, закачну фильмец....!!!
    - Кисуля, сунь попу в сканер дай полюбуюсь :)


     

  • 1.7, DarkSide83 (?), 07:01, 08/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    А к нескольким машинам одновременно флешку прикрутить можно будет?
     
  • 1.9, vo0d (?), 21:43, 08/10/2009 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    осталось найти usb-камеру и ппц коту! :)
     
  • 1.12, dyug (?), 23:17, 10/10/2009 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    посмотрел, в убунте 9.10 (текущее состояние) уже все есть.
    можно ставить, и пользоваться. :-)
    Пробовал года 2 или 3 назад один из самых первых реализаций - работало.
     
  • 1.13, Er4SSy (ok), 18:40, 11/10/2009 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    осталось удаленно воткнуть эту самую флешку, которая в Австралии, в usb-разъем
     
  • 1.14, lll (??), 19:39, 11/10/2009 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    А hasp можно ???
     
  • 1.15, iZEN (ok), 20:12, 11/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    На FreeBSD всё гораздо проще -- есть GEOM Gate.

    На сервере:
    # echo 'geom_gate_load="YES"' >> /boot/loader.conf
    # echo '192.168.1.0/24    RW   /dev/da0s1' >> /etc/gg.exports
    # kldload geom_gate && ggated

    На клиенте (из сети 192.168.1.0/24):
    % ggatec create -o rw server_ip /dev/da0s1
    ggate0 # ответ команды на создание нового устройства
    % mount_msdosfs /dev/ggate0 /mnt/

    Идентификация подключенных устройств на клиенте:
    % ggatec list -v
           NAME: ggate0
           info: 192.168.1.10:3080 /dev/da0s1
         access: read-write
        timeout: 0
    queue_count: 0
    queue_size: 1024
    references: 2
      mediasize: 4110400512 (3.8G)
    sectorsize: 512
           mode: r0w0e0

    Восстановление geom_gate на клиенте после сбоев сервера:
    % ggatec rescue -o rw -u 0 server_ip /dev/da0s1
    # 0 - номер "пропавшего" устройства ggate

    Остановка работы с устройством на клиенте:
    % umount /mnt
    % ggatec destroy -u 0
    # 0 - номер устройства ggate

    Остановка работы с устройством на сервере:
    # pkill ggated

    Можно экспортировать RAW-разделы.

     
     
  • 2.16, Andrey Mitrofanov (?), 13:00, 12/10/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > На FreeBSD всё гораздо проще
    >Можно экспортировать RAW-разделы.

    Принтеры и камеры вы "там" у себя тож "просто" форматируете?

     

  • 1.17, amaora (?), 21:27, 12/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    Не красиво как то, через NFS или FUSE/CUSE разве нельзя usbfs примонтировать где угодно? ... Хотя Storage устройства таким образом работать не будут, да, и все остальное для чего драйверы в ядре.
     
     
  • 2.18, gordev (ok), 10:20, 13/10/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    а веб камеру или другое какое нибудь устройство?
     

  • 1.19, Hawk (??), 17:44, 15/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +/
    интересует подключение например МФУ. Дома xerox pe220, подключен к асус wl500g. Печать с других машин - без проблем, а вот если бы сканер зацепить - цены бы небыло
     
  • 1.20, Foekn (?), 00:32, 21/11/2009 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    У меня на двух машинах без libsysfs-dev не конфигурировалось
     
  • 1.21, Вовец (?), 23:05, 25/10/2010 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    Интересует бодобная реализация для win клиентов. Надобно hasp расшарить.
     
  • 1.22, riv1329 (?), 01:31, 09/05/2011 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    В общем, действительно много ошибок.

    Во первых даже при экспорте через lo и импорте на ту-же машину, минут через 10 всё зависает намертво.

    Если пробрасывать через локалку или инет - то все зависает гораздо быстрее. Причем и клиент и сервер.

    Хотя да, запускается, работает. Пробовал сервер - Ubuntu 10.10, клиенты ubuntu 10.10, Windows XP.

    Пока для хаспа не вариант - слишком не надёжно :-(

     
  • 1.23, Gosa (?), 03:48, 21/06/2012 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    HASP вариант для виртуалки можно попробовать
     
  • 1.24, shweew (?), 17:30, 28/06/2012 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    У мну вроде собралось, но не работает:

    ts_001e0b397db7:~# usbip_bind_driver --list
    List USB devices
    - busid 4-5 (13fe:3223) 4-5:1.0 -> usb-storage
    - busid 4-6 (04a9:1905) 4-6:1.0 -> none
    ts_001e0b397db7:~# usbip_bind_driver --usbip 4-5
    ** (process:1592): DEBUG: 4-5:1.0 -> usb-storage
    ** (process:1592): DEBUG: unbinding interface ** (process:1592):
    WARNING **: add 4-5 to match_busid, failed

    Никто не сталкивался с таким ашибком?

     
  • 1.25, ZugDuk (?), 20:29, 20/09/2020 [ответить] [﹢﹢﹢] [ · · · ]      [к модератору]
  • +/
    Убогая программа - меняйте руководителя проекта.
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру