通过网络共享USB驱动器


8

我正在寻找一种通过网络共享USB设备的免费方法。我得到了连接了USB设备的RaspberryPi(树莓派)。我希望能够从我的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 $

会是什么呢 ?

Answers:


3

您可以使用此软件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这样,如果命令不起作用,请使用rootsudo在命令前使用

在服务器上安装和使用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,其格式为:

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设备(例如,对其进行安装,格式化,写入,从其中读取等)。

拆卸远程USB设备

远程USB设备可以按以下方式分离:

客户1:

跑...

usbip --port

...以找出远程USB设备在客户端上使用的端口-在本例中为端口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>

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

usbip -d 00

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

port 0 detached

在服务器上,我们使用BUSID (1-1)来将USB设备绑定到本地系统(--other开关将设备绑定到本地系统,以使其不再可以通过网络使用):

服务器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!

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

客户1:

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

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

链接

http://usbip.sourceforge.net

教程的源代码(服务器端)

教程的来源(客户端)


给Ubuntu Trusty(14.04)用户的注意事项:您将需要从Utopic或更高版本向后移植的内核,并且需要使用二进制文件。有关更多信息,请参见bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003。不幸的是,任何较旧的受支持的Ubuntu版本都存在错误,并且usbip不能正常运行。
gertvdijk 2015年

使用前检查此答案:askubuntu.com/a/647071/187689
iman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.