如何通过OpenSUSE 11.2设置USB-over-IP服务器和客户端
本教程将介绍如何使用OpenSUSE 11.2以及USB-over-IP客户端(也运行OpenSUSE 11.2)设置IP-over-IP服务器。 USB / IP项目旨在通过IP网络开发一个通用的USB设备共享系统。 要在具有完整功能的计算机之间共享USB设备,USB / IP将“USB I / O消息”封装到TCP / IP有效载荷中,并在计算机之间传输。 USB over IP可以用于虚拟机,例如,无法访问主机系统的硬件 - USB-over-IP允许虚拟机使用远程USB设备。
我不会保证这将为您工作!
1初步说明
本教程基于AliRezaTaleghani的教程如何修改您的Gnu / Linux框以作为IP over IP服务器上的USB ,但我已经调整了OpenSUSE 11.2(服务器和客户端)。 如果您想使用Windows客户端,请查看AliRezaTaleghani的教程 - 该部分仍然相同。
在本教程中,我使用的IP地址为192.168.0.100
的服务器server1.example.com
和运行OpenSUSE 11.2的IP地址为192.168.0.101
的客户端client1.example.com
。 这些设置可能会有所不同,因此您必须在适当的情况下更换它们。
2在服务器上安装和使用USB / IP
server1:
我们可以安装usbip
如下:
yast2 -i usbip
usbip
希望包含目录/ usr / share / hwdata
中的已知USB设备列表( usb.ids
)的文件,但是在OpenSUSE 11.2中,它位于/usr/share/usbip/usb.ids中
,因此我们创建了一个符号链接:
mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/
之后我们加载usbip
内核模块:
modprobe usbip
modprobe usbip_common_mod
要检查是否真的加载,运行:
lsmod | grep usbip
输出应与此类似:
server1:~ # lsmod | grep usbip
usbip 21540 0
usbip_common_mod 25232 1 usbip
server1:~ #
为了确保两个模块在引导系统时自动加载,您可以将它们添加到/ etc / sysconfig / kernel
中的MODULES_LOADED_ON_BOOT
行中:
vi /etc/sysconfig/kernel
[...] ## Type: string ## ServiceRestart: boot.loadmodules # # This variable contains the list of modules to be loaded # once the main filesystem is active # You will find a few default modules for hardware which # can not be detected automatically. # MODULES_LOADED_ON_BOOT="usbip usbip_common_mod" [...] |
跑
SuSEconfig
之后。
现在我们可以启动usbip
守护进程:
usbipd -D
server1:~ # usbipd -D
Bind usbip.ko to a usb device to be exportable!
server1:~ #
现在附上要导出到服务器的USB设备 - 我在这里使用SanDisk USB闪存驱动器。
执行命令
lsusb
以找到相应的供应商/设备ID,其形式为:
Bus XXX Device YYY: ID VendorID:DeviceID
我的服务器上的输出如下:
server1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 058f:6362 Alcor Micro Corp. Hi-Speed 21-in-1 Flash Card Reader/Writer (Internal/External)
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
server1:~ #
我的SanDisk USB闪存驱动器的供应商/设备ID为0781:5151
。
现在跑
bind_driver --list
我的服务器上的输出如下:
server1:~ # bind_driver --list
List USB devices
- busid 1-4 (058f:6362)
1-4:1.0 -> usb-storage
- busid 2-5 (0781:5151)
2-5:1.0 -> usb-storage
server1:~ #
如您所见,我的SanDisk USB闪存驱动器( 0781:5151
)的供应商/设备ID对应BUSID 2-5
。 我们需要这个BUSID将USB设备连接到服务器:
bind_driver --usbip 2-5
server1:~ # bind_driver --usbip 2-5
** (process:2952): DEBUG: 2-5:1.0 -> usb-storage
** (process:2952): DEBUG: unbinding interface
** (process:2952): DEBUG: write "add 2-5" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 2-5 to usbip, complete!
server1:~ #
就这样,我们现在可以在远程usbip
客户端上使用SanDisk USB闪存驱动器。
BTW,如果你运行...
netstat -tap
...你应该看到usbip
守护进程正在监听端口3240( triomotion
),所以请确保这个端口没有阻止你的防火墙:
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 *:triomotion *:* LISTEN 2948/usbipd
tcp 0 0 *:sunrpc *:* LISTEN 2397/rpcbind
tcp 0 0 *:ssh *:* LISTEN 2731/sshd
tcp 0 0 localhost:ipp *:* LISTEN 2455/cupsd
tcp 0 0 *:smtp *:* LISTEN 2843/master
tcp 0 0 192.168.0.15:ssh 192.168.0.1:d2000kernel ESTABLISHED 2905/0
tcp 0 0 *:sunrpc *:* LISTEN 2397/rpcbind
tcp 0 0 *:ssh *:* LISTEN 2731/sshd
tcp 0 0 localhost:ipp *:* LISTEN 2455/cupsd
tcp 0 0 *:smtp *:* LISTEN 2843/master
server1:~ #