Compartir unidad USB a través de la red

8

Estoy buscando un método gratuito para compartir un dispositivo USB a través de la red. Tengo un RaspberryPi (raspbian) que tiene un dispositivo USB conectado. Quiero poder recibir y enviar comandos a este dispositivo desde mi servidor Linux.

Lo intenté remserialpero no puedo conectar el cliente al servidor. También lo intenté VirtualHerepero se estrelló

¿Conoces alguna solución gratuita para hacerlo?

EDITAR:

Gracias por este tutorial, lo probé pero tuve algunos problemas:

pi@raspberrypi /boot $ zcat /proc/config.gz |grep USBIP
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_HOST=m
# CONFIG_USBIP_DEBUG is not set
pi@raspberrypi /boot $ sudo modprobe usbip-core
pi@raspberrypi /boot $ sudo modprobe usbip-host
pi@raspberrypi /boot $ sudo usbipd -D

pi@raspberrypi /boot $ usbip list -l
Local USB devices
=================
- busid 1-1 (0424:9514)
     1-1:1.0 -> hub
- busid 1-1.1 (0424:ec00)
     1-1.1:1.0 -> smsc95xx
- busid 1-1.3 (0403:6010)
     1-1.3:1.0 -> unknown
     1-1.3:1.1 -> unknown
- busid 1-1.4 (04f2:1126)
     1-1.4:1.0 -> usbhid
- busid 1-1.5 (04f2:1125)
     1-1.5:1.0 -> usbhid
     1-1.5:1.1 -> usbhid

pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.0 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.1 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "add 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.0 failed
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.1 failed
usbip: error: could not bind device to usbip-host
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "del 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
  pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3:1.1
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
  running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:143:[unbind_other]
  problem getting device attributes: No such file or directory
usbip: error: could not unbind driver from device on busid 1-1.3:1.1
pi@raspberrypi /boot $

qué podría ser ?

PyNico
fuente

Respuestas:

3

puede usar este software usbip y así es cómo configurar el software y usarlo tanto en el lado del servidor como del cliente

Notas:

  1. En este tutorial, utilice el comando server server1.example.com with IP 192.168.0.100y client client1.example.com with IP 192.168.0.101, ambos ejecutando Ubuntu. Estas configuraciones pueden ser diferentes para usted, por lo que debe reemplazarlas cuando corresponda.

  2. Además, la cuenta utilizada en este tutorial es la siguiente: rootsi un comando no funciona, use rooto use sudoantes del comando

Instalación y uso de USB / IP en el servidor

Podemos instalar usbip de la siguiente manera:

apt-get install usbip

Luego cargamos los módulos del kernel usbip:

modprobe usbip

modprobe usbip_common_mod

Para verificar si realmente se cargaron, ejecute:

lsmod | grep usbip

El resultado debe ser similar a este:

root@server1:~# lsmod | grep usbip
usbip                  15124  0
usbip_common_mod       13605  1 usbip
root@server1:~#

Para asegurarse de que ambos módulos se carguen automáticamente cada vez que inicie el sistema, puede agregarlos a / etc / modules:

vi /etc/modules

[...]
usbip
usbip_common_mod

Ahora podemos iniciar el demonio usbip:

root@server1:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!

Ahora conecte un dispositivo USB que desee exportar al servidor; estoy usando una unidad flash USB SanDisk aquí.

Ejecutar el comando lsusb

para encontrar la identificación del proveedor / dispositivo correspondiente que tiene la forma de:

Bus XXX Device YYY: ID VendorID:DeviceID

El resultado en mi servidor es el siguiente:

root@server1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

La identificación del proveedor / dispositivo de mi unidad flash USB SanDisk es 0781: 5151.

Ahora corre

usbip_bind_driver --list
root@server1:~# usbip_bind_driver --list
List USB devices
 - busid 1-1 (0781:5151)
     1-1:1.0 -> usb-storage

Como puede ver, la identificación del proveedor / dispositivo de mi unidad flash USB SanDisk (0781: 5151) corresponde al BUSID 1-1. Necesitamos esto BUSIDpara conectar el dispositivo USB al servidor:

root@server1:~# usbip_bind_driver --usbip 1-1
** (process:765): DEBUG:  1-1:1.0       -> usb-storage
** (process:765): DEBUG: unbinding interface
** (process:765): DEBUG: write "add 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to usbip, complete!

Eso es todo, ahora podemos usar la unidad flash USB SanDisk en un cliente USB remoto.

Por cierto, si corres ...

netstat -tap

... deberías ver que el demonio usbip está escuchando port 3240

así que asegúrese de que su firewall no bloquee este puerto:

root@server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      537/sshd
tcp        0      0 *:3240                  *:*                     LISTEN      762/usbipd
tcp        0     52 server1.example.com:ssh 192.168.0.199:4024      ESTABLISHED 667/0
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      537/sshd

Instalación y uso de USB / IP en el cliente

También necesitamos instalar usbip en el cliente:

sudo apt-get install usbip

Luego cargamos el vhci-hcdmódulo del núcleo:

modprobe vhci-hcd

Para verificar si realmente se cargó, ejecute:

root@client1:~# lsmod | grep vhci_hcd
vhci_hcd               19800  0
usbip_common_mod       13605  1 vhci_hcd

Para asegurarse de que el módulo se carga automáticamente cada vez que inicia el sistema, puede agregarlo a /etc/modules:

vi /etc/modules

[...]
vhci-hcd

Ahora conéctese al servidor usbip y obtenga una lista de dispositivos USB disponibles:

    usbip -l 192.168.0.100
(192.168.0.100 is the IP address of the usbip server.)

Debería encontrar la unidad flash USB SanDisk en la salida (BUSID 1-1):

root@client1:~# usbip -l 192.168.0.100
- 192.168.0.100
     1-1: SanDisk Corp. : Cruzer Micro Flash Drive (0781:5151)
        : /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

Para conectar ese dispositivo al cliente, ejecute:

root@client1:~# usbip -a 192.168.0.100 1-1
8 ports available
port 0 attached

Ahora ejecute lsusby debería encontrar el dispositivo USB remoto en la salida del cliente:

root@client1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Ahora puede usar el dispositivo USB remoto como si fuera un dispositivo USB local (por ejemplo, montarlo, formatearlo, escribirlo, leerlo, etc.).

Desconectar un dispositivo USB remoto

Un dispositivo USB remoto se puede desconectar de la siguiente manera:

cliente1:

Correr...

usbip --port

... para averiguar el puerto que utiliza el dispositivo USB remoto en el cliente, en este caso, el puerto 00:

root@client1:~# usbip --port
8 ports available

Port 00: <Port in Use> at High Speed(480Mbps)
       SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
       1-1 -> usbip://192.168.0.100:3240/1-1  (remote devid 00010002 (bus/dev 001/002))
       1-1:1.0 used by usb-storage
           /sys/class/bsg/1:0:0:0/device
           /sys/class/scsi_device/1:0:0:0/device
           /sys/class/scsi_disk/1:0:0:0/device
           /sys/class/scsi_host/host1/device
           /sys/class/usb_endpoint/usbdev1.4_ep02/device
           /sys/class/usb_endpoint/usbdev1.4_ep81/device
           /sys/block/sdb/device
Port 01: <Port Available>
Port 02: <Port Available>
Port 03: <Port Available>
Port 04: <Port Available>
Port 05: <Port Available>
Port 06: <Port Available>
Port 07: <Port Available>

Necesitamos el número de puerto para desconectar el dispositivo:

usbip -d 00

root@client1:~# usbip -d 00
8 ports available

port 0 detached

En el servidor, usamos BUSID (1-1)para vincular el dispositivo USB al sistema local (el otro interruptor conecta el dispositivo al sistema local para que ya no esté disponible en la red):

servidor 1:

usbip_bind_driver --other 1-1

root@server1:~# usbip_bind_driver --other 1-1
** (process:7333): DEBUG: write "del 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to other drivers than usbip, complete!

Ahora regrese al cliente y verifique si el dispositivo USB remoto todavía está disponible:

cliente1:

Si todo va bien, ya no debería aparecer en la lista:

root@client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

Enlaces

http://usbip.sourceforge.net

Fuente del tutorial (lado del servidor)

Fuente del tutorial (lado del cliente)

Mente gorda
fuente
Nota para los usuarios de Ubuntu Trusty (14.04): necesitará un núcleo con respaldo de Utopic o más reciente y jugar con los binarios. Consulte para obtener más información bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003 . Desafortunadamente, cualquier versión anterior de Ubuntu admitida tiene fallas y se envía con usbip que no funciona.
gertvdijk
Verifique esta respuesta antes de usar: askubuntu.com/a/647071/187689
iman