Condividi unità USB sulla rete


8

Sto cercando un metodo gratuito per condividere un dispositivo USB in rete. Ho un RaspberryPi (raspbian) con un dispositivo USB collegato. Voglio essere in grado di ricevere e inviare comandi a questo dispositivo dal mio server Linux.

Ho provato remserialma non riesco a connettere il client al server. ho anche provato VirtualHerema si è schiantato

Conosci qualche soluzione gratuita per farlo?

MODIFICARE :

Grazie per questo tutorial, l'ho provato ma ho avuto qualche problema:

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 $

cosa potrebbe essere ?

Risposte:


3

è possibile utilizzare questo software usbip e questo è come impostare il software e utilizzarlo sia sul lato server che sul lato client

Appunti:

  1. In questo tutorial usare la server server1.example.com with IP 192.168.0.100e client client1.example.com with IP 192.168.0.101, entrambi in esecuzione Ubuntu Queste impostazioni potrebbero differire per voi, in modo da avere a sostituirli, se del caso.

  2. Inoltre, l'account utilizzato in questa esercitazione è rootquindi se un comando non funziona, utilizzare rooto utilizzare sudoprima del comando

Installazione e utilizzo di USB / IP sul server

Possiamo installare usbip come segue:

apt-get install usbip

Successivamente cariciamo i moduli del kernel usbip:

modprobe usbip

modprobe usbip_common_mod

Per verificare se sono stati effettivamente caricati, esegui:

lsmod | grep usbip

L'output dovrebbe essere simile a questo:

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

Per assicurarsi che entrambi i moduli vengano caricati automaticamente ogni volta che si avvia il sistema, è possibile aggiungerli a / etc / modules:

vi /etc/modules

[...]
usbip
usbip_common_mod

Ora possiamo avviare il demone usbip:

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

Ora collega un dispositivo USB che desideri esportare sul server: sto usando un'unità flash USB SanDisk qui.

Esegui il comando lsusb

per trovare l'ID fornitore / dispositivo corrispondente che si presenta sotto forma di:

Bus XXX Device YYY: ID VendorID:DeviceID

L'output sul mio server è il seguente:

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

L'ID fornitore / dispositivo dell'unità flash USB SanDisk è 0781: 5151.

Adesso corri

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

Come vedi, l'ID fornitore / dispositivo dell'unità flash USB SanDisk (0781: 5151) corrisponde al BUSID 1-1. Ne abbiamo bisogno BUSIDper collegare il dispositivo USB al server:

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!

Questo è tutto, ora possiamo usare l'unità flash USB SanDisk su un client usbip remoto.

A proposito, se corri ...

netstat -tap

... dovresti vedere che il demone usbip è in ascolto port 3240

quindi assicurati che questa porta non sia bloccata dal tuo 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

Installazione e utilizzo di USB / IP sul client

Dobbiamo installare anche usbip sul client:

sudo apt-get install usbip

Successivamente cariciamo il vhci-hcdmodulo del kernel:

modprobe vhci-hcd

Per verificare se è stato caricato, esegui:

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

Per assicurarsi che il modulo venga caricato automaticamente ogni volta che si avvia il sistema, è possibile aggiungerlo a /etc/modules:

vi /etc/modules

[...]
vhci-hcd

Ora connettiti al server usbip e ottieni un elenco dei dispositivi USB disponibili:

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

È necessario trovare l'unità flash USB SanDisk nell'output (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)

Per collegare quel dispositivo al client, eseguire:

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

Ora esegui lsusbe dovresti trovare il dispositivo USB remoto nell'output sul client:

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

Ora puoi utilizzare il dispositivo USB remoto come se fosse un dispositivo USB locale (ad es. Montalo, formattalo, scrivilo, leggilo da un modulo, ecc.).

Scollegamento di un dispositivo USB remoto

Un dispositivo USB remoto può essere rimosso come segue:

client1:

Correre...

usbip --port

... per scoprire la porta che il dispositivo USB remoto utilizza sul client - in questo caso è la 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>

Abbiamo bisogno del numero di porta per staccare il dispositivo:

usbip -d 00

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

port 0 detached

Sul server, usiamo il BUSID (1-1)per collegare il dispositivo USB al sistema locale (l'interruttore --other collega il dispositivo al sistema locale in modo che non sia più disponibile sulla rete):

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!

Ora torna al client e controlla se il dispositivo USB remoto è ancora disponibile:

client1:

Se tutto va bene, non dovrebbe più essere elencato:

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

link

http://usbip.sourceforge.net

Fonte del tutorial (lato server)

Fonte del tutorial (lato client)


Nota per gli utenti di Ubuntu Trusty (14.04): sarà necessario un kernel backportato da Utopic o più recente e giocherellare con i binari. Per ulteriori informazioni, consultare bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003 . Qualunque versione precedente di Ubuntu supportata sfortunatamente è difettosa di bug e viene fornita con usbip non funzionante.
gertvdijk,

Controlla questa risposta prima dell'uso: askubuntu.com/a/647071/187689
iman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.