通过网络共享USB驱动器

我正在寻找一种通过网络共享USB设备的免费方法。 我有一个连接USB设备的RaspberryPi(raspbian)。 我希望能够从我的Linux服务器接收并向此设备发送命令。

我尝试了remserial但我无法将客户端连接到服务器。 我也试过VirtualHere但它崩溃了

你知道一些免费的解决方案吗?

编辑:

对于本教程的Thx,我尝试了但是我遇到了一些麻烦:

 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 $ 

会是什么呢 ?

您可以使用此软件usbip ,这是如何设置软件并在服务器端和客户端使用它

笔记:

  1. 在本教程中,使用server server1.example.com with IP 192.168.0.100以及client client1.example.com with IP 192.168.0.101 ,两者都运行Ubuntu这些设置可能因您而异,因此您必须在适当的位置更换它们。

  2. 此外,本教程中使用的帐户是root因此如果命令不起作用,请使用root或在命令之前使用sudo

在服务器上安装和使用USB / IP

我们可以按如下方式安装usbip:

 apt-get install usbip 

然后我们加载usbip内核模块:

 modprobe usbip modprobe usbip_common_mod 

要检查它们是否真的已加载,请运行:

 lsmod | grep usbip 

输出应该类似于这个:

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

要确保在引导系统时自动加载两个模块,可以将它们添加到/ etc / modules:

 vi /etc/modules [...] usbip usbip_common_mod 

现在我们可以启动usbip守护进程了:

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

现在连接要导出到服务器的USB设备 – 我在这里使用的是SanDisk USB闪存盘。

执行命令lsusb

找到相应的供应商/设备ID,其forms为:

 Bus XXX Device YYY: ID VendorID:DeviceID 

我服务器上的输出如下:

 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 

我的SanDisk USB闪存盘的供应商/设备ID是0781:​​5151。

现在跑

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

如您所见,我的SanDisk USB闪存盘(0781:​​5151)的厂商/设备ID对应于BUSID 1-1。 我们需要此BUSID将USB设备连接到服务器:

 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! 

就是这样,我们现在可以在远程usbip客户端上使用SanDisk USB闪存盘。

顺便说一句,如果你跑……

 netstat -tap 

…你应该看到usbip守护进程正在侦听port 3240

所以请确保防火墙不阻止此端口:

 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 

在客户端上安装和使用USB / IP

我们还需要在客户端上安装usbip:

 sudo apt-get install usbip 

然后我们加载vhci-hcd内核模块:

 modprobe vhci-hcd 

要检查它是否真的已加载,请运行:

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

要确保在引导系统时自动加载模块,可以将其添加到/etc/modules

 vi /etc/modules [...] vhci-hcd 

现在连接到usbip服务器并获取可用USB设备列表:

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

你应该在输出(BUSID 1-1)中找到SanDisk USB闪存盘:

 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) 

要将该设备附加到客户端,请运行:

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

现在运行lsusb ,您应该在客户端的输出中找到远程USB设备:

 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 

您现在可以使用远程USB设备,就像它是本地USB设备一样(例如,安装,格式化,写入,读取forms等)。

拆卸远程USB设备

可以按如下方式拆卸远程USB设备:

客户端1:

跑…

 usbip --port 

…找出远程USB设备在客户端上使用的端口 – 在这种情况下它是端口00:

 root@client1:~# usbip --port 8 ports available Port 00:  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 02:  Port 03:  Port 04:  Port 05:  Port 06:  Port 07:  

我们需要端口号来分离设备:

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

在服务器上,我们使用BUSID (1-1)将USB设备绑定到本地系统( – 另一台交换机将设备绑定到本地系统,以便它不再通过网络可用):

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! 

现在返回客户端并检查远程USB设备是否仍然可用:

客户端1:

如果一切顺利,则不应再列出:

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

链接

http://usbip.sourceforge.net

教程的来源(服务器端)

教程的来源(客户端)