Compartilhar unidade USB pela rede

7

Estou procurando um método gratuito para compartilhar um dispositivo USB pela rede. Eu tenho um RaspberryPi (raspbian) que tem um dispositivo USB conectado. Eu quero ser capaz de receber e enviar o comando para este dispositivo do meu servidor Linux.

Eu tentei remserial , mas não consigo conectar o cliente ao servidor. Eu também tentei VirtualHere , mas ele caiu

Você conhece alguma solução gratuita para fazer isso?

EDITAR:

Thx para este tutorial, eu tentei, mas tive alguns 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 $

o que poderia ser?

    
por PyNico 22.04.2015 / 09:58

1 resposta

3

você pode usar este software usbip e é assim que configurar o software e usá-lo no servidor e no cliente lado

Notas:

  1. Neste tutorial, use o server server1.example.com with IP 192.168.0.100 e o client client1.example.com with IP 192.168.0.101 , ambos executando o Ubuntu. Essas configurações podem ser diferentes para você, portanto, é necessário substituí-las quando apropriado.

  2. Além disso, a conta usada neste tutorial é root , portanto, se um comando não estiver funcionando, use o root ou use sudo antes do comando

Instalando e usando USB / IP no servidor

Podemos instalar o usbip da seguinte forma:

apt-get install usbip

Depois disso, nós carregamos os módulos do kernel usbip:

modprobe usbip

modprobe usbip_common_mod

Para verificar se eles realmente foram carregados, execute:

lsmod | grep usbip

A saída deve ser semelhante a esta:

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

Para garantir que ambos os módulos sejam carregados automaticamente sempre que você inicializar o sistema, você pode adicioná-los ao / etc / modules:

vi /etc/modules

[...]
usbip
usbip_common_mod

Agora podemos iniciar o daemon usbip:

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

Agora, conecte um dispositivo USB que você deseja exportar para o servidor - estou usando uma unidade flash USB da SanDisk aqui.

Execute o comando lsusb

para encontrar o ID do fornecedor / dispositivo correspondente que está na forma de:

Bus XXX Device YYY: ID VendorID:DeviceID

A saída no meu servidor é a seguinte:

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

O ID do fornecedor / dispositivo da minha unidade flash USB SanDisk é 0781: 5151.

Agora corra

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 você pode ver, o ID do fornecedor / dispositivo da minha unidade flash USB SanDisk (0781: 5151) corresponde ao BUSID 1-1. Precisamos que esse BUSID conecte o dispositivo USB ao 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!

É isso aí, agora podemos usar a unidade flash USB SanDisk em um cliente usbip remoto.

BTW, se você for ...

netstat -tap

... você deve ver que o daemon usbip está escutando port 3240

então, por favor, certifique-se de que esta porta não está bloqueada pelo seu firewall:

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

Instalando e usando USB / IP no cliente

Também precisamos instalar o usbip no cliente:

sudo apt-get install usbip

Depois, carregamos o módulo do kernel vhci-hcd :

modprobe vhci-hcd

Para verificar se realmente foi carregado, execute:

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

Para garantir que o módulo seja carregado automaticamente sempre que você inicializar o sistema, você poderá adicioná-lo a /etc/modules :

vi /etc/modules

[...]
vhci-hcd

Agora conecte-se ao servidor usbip e obtenha uma lista de dispositivos USB disponíveis:

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

Você deve encontrar a unidade flash USB da SanDisk na saída (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 anexar esse dispositivo ao cliente, execute:

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

Agora execute lsusb e você deverá encontrar o dispositivo USB remoto na saída do 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

Agora você pode usar o dispositivo USB remoto como se fosse um dispositivo USB local (por exemplo, montá-lo, formatá-lo, escrever, ler, etc.).

Desanexando um dispositivo USB remoto

Um dispositivo USB remoto pode ser separado da seguinte forma:

client1:

Executar ...

usbip --port

... para descobrir a porta que o dispositivo USB remoto usa no cliente - neste caso, é a porta 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>

Precisamos do número da porta para desanexar o dispositivo:

usbip -d 00

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

port 0 detached

No servidor, usamos o BUSID (1-1) para ligar o dispositivo USB ao sistema local (a opção --other liga o dispositivo ao sistema local para que ele não esteja mais disponível na rede):

server1:

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!

Agora volte para o cliente e verifique se o dispositivo USB remoto ainda está disponível:

client1:

Se tudo correr bem, não deverá mais ser listado:

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

Links

link

Fonte do tutorial (lado do servidor)

Fonte do tutorial (lado do cliente)

    
por Fat Mind 22.04.2015 / 16:26

Tags