usbip – Comparte tus dispositivos usb en red
Enviado por miguelcarmona :: 19 de febrero de 2010
usbip es un proyecto bastante interesante. Nos permite compartir cualquier dispositivo usb conectado en un equipo para que lo pueda gestionar otro. Puede ser bastante útil para compartir cierto hardware con máquinas virtuales.
Su instalación y configuración en openSuse viene a ser bastante sencilla:
El servidor
Instalación:
zypper install usbip
El software usbip lee la lista de dispositivos conocidos en la ruta /usr/share/hwdata pero en realidad está /usr/share/usbip/ así que con hacer un enlace a dicho archivo bastaría
mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/
Cargamos los módulos necesarios en el kernel:
modprobe usbip
modprobe usbip_common_mod
Podemos verificar si todo está correcto:
lsmod | grep usbip
Nos saldría algo como:
server:~ # lsmod | grep usbip
usbip 21540 0
usbip_common_mod 25232 1 usbip
server:~ #
Para hacer automática la carga del módulo al iniciar el sistema podemos añadirlo a la línea MODULES_LOADED_ON_BOOT=»usbip usbip_common_mod» del archivo /etc/sysconfig/kernel
Si hemos añadido la «auto-carga» de dicho módulo, es recomendable ejecutar un:
SuSEconfig
Para iniciar el demonio de usbip, ejecutaremos:
usbipd -D
Nos reportará algo así:
Bind usbip.ko to a usb device to be exportable!
A partir de este momento, ya tenemos el demonio funcionando para compartir el dispositivo.
Sólo nos queda indicarle el dispositivo que deseamos compartir. Para saber el dispositivo a compartir, podemos usar lsusb:
server:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 05ac:9130 Apple, Inc.
Bus 001 Device 004: ID 058f:6362 Alcor Micro Corp. Hi-Speed 21-in-1 Flash Card Reader/Writer (Internal/External)
Bus 001 Device 005: ID 05e3:0718 Genesys Logic, Inc.
Bus 001 Device 006: ID 05ac:9222 Apple, Inc.
Bus 001 Device 007: ID 04d9:0499 Holtek Semiconductor, Inc.
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 046d:08f0 Logitech, Inc. QuickCam Messenger
server:~ #
En principio, compartiré un disco duro usb (05e3:0718 Genesys Logic, Inc.) y la webcam logitech (046d:08f0 Logitech, Inc. QuickCam Messenger).
Con el comando bind_driver –list, listaremos los dispositivos que se permiten compartir:
server:~ # bind_driver --list
List USB devices
- busid 1-2 (05ac:9130)
1-2:1.0 -> hub
- busid 1-3 (058f:6362)
1-3:1.0 -> usb-storage
- busid 1-5 (05e3:0718)
1-5:1.0 -> usb-storage
- busid 2-1 (046d:08f0)
2-1:1.0 -> STV06xx
2-1:1.1 -> snd-usb-audio
2-1:1.2 -> snd-usb-audio
- busid 1-2.2 (05ac:9222)
1-2.2:1.0 -> usbhid
- busid 1-2.3 (04d9:0499)
1-2.3:1.0 -> usbhid
server:~ #
Para enlazar dichos dispositivos:
bind_driver --usbip 1-5
bind_driver --usbip 2-1
De momento, si tenemos el cortafuegos funcionando, recomiendo detenerlo para comprobar su funcionamiento y después configurarlo para permitir acceso al puerto 3240 en TCP:
netstat -putan | grep usbipd
El cliente
Instalación:
zypper install usbip
Volvemos a enlazar bien el archivo usb.ids en la ruta correcta:
mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/
Cargamos los módulos necesarios:
modprobe vhci-hcd
Comprobando…
client:~ # lsmod | grep vhci_hcd
vhci_hcd 26576 0
usbip_common_mod 25232 1 vhci_hcd
client:~ #
Para establecerlo como auto-inicio editaremos el archivo /etc/sysconfig/kernel y actualizar MODULES_LOADED_ON_BOOT=»vhci-hcd»
Si hemos establecido el auto-inicio
SuSEconfig
Ahora listamos los dispositivos compartidos del equipo servidor:
client:~ #usbip -l 192.168.10.5
- 192.168.10.5
1-5: Genesys Logic, Inc. : unknown product (05e3:0718)
: /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)
2-1: Logitech, Inc. : QuickCam Messenger (046d:08f0)
: /sys/devices/pci0000:00/0000:00:02.0/usb2/2-1
: Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff)
: 0 - Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff)
: 1 - Audio / Control Device / unknown protocol (01/01/00)
: 2 - Audio / Streaming / unknown protocol (01/02/00)
client:~ #
Lógicamente, sustituiremos con la ip del equipo servidor.
Para conectar los dispositivos:
client:~ #usbip -a 192.168.10.5 1-5
8 ports available
port 0 attached
client:~ # usbip -a 192.168.10.5 2-1
8 ports available
port 1 attached
linux-gqss:~ #
Comprobamos…
linux-gqss:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 004: ID 05e3:0718 Genesys Logic, Inc.
Bus 005 Device 005: ID 046d:08f0 Logitech, Inc. QuickCam Messenger
linux-gqss:~ #
Pruebas y conclusiones
Las pruebas, sinceramente, son bastante escasas. Tras intentar varias veces la configuración de la webcam, no pude hacerla funcionar correctamente. Sólo se mostraba una imagen verde (aunque puede ser debido a los problemas que tengo en el equipo cliente con el driver nvidia).
Sobre el disco duro usb, en una hora aproximada de pruebas, funcionó perfectamente.
Calculé la transferencia media y resultó en 7.143 Mb/s. No es mala transferencia para unas tarjetas de red a 100 Mbits, pero he de decir que las pruebas de transferencia por nfs superan el rendimiento (alrededor de 9.5 Mb/s de media).
El proyecto usbip, ha liberado una etapa bastante temprana del cliente para windows, por lo levanté una máquina virtual y me puse a «trastear». A pesar de listar los dispositivos, reiteró varios errores al hacer la conexión.
Fuentes:
http://www.howtoforge.com/how-to-set-up-a-usb-over-ip-server-and-client-with-opensuse-11.2