Usboverip开源项目的源代码可以在官方网站上下载,源码目录下也有Readme和usage说明文档,但是由于年代久远,已经不适合现在的系统使用了。这次实验平台的搭建采用了如下两种环境:opensuse12.3(server)<——>opensuse12.3(client);opensuse(server)<——>winxp(client)。
-
opensuse12.3(server)<——>opensuse12.3(client)
(一)服务端
-
首先要保证server和client端的opensuse12.3系统安装了内核源码树。
-
在终端运行命令/lib/modules/3.5.0-17-generic/kernel/drivers/staging/,进入目录,然后运行insmodusbip-core.ko和insmod usbip-host.ko命令加载server端的驱动模块。
-
将用户空间程序从内核源码树种拷贝出来。运行命令
/ cd /usr/src/linux-3.9.11/drivers/staging/usbip/userspace/,进入到存放用户空间代码的目录,把整个userspace目录拷贝到home目录下。
-
重新编译userspace目录下的代码。在编译这部分代码之前需要安装sysfsutils包,这个可以在网上下载源码,让后./configure 、make、make install安装,在此不废话。安装完成sysfsutils包之后,进入到userspace目录下,运行/autogen.sh ——>,./configure——> make命令,如果没有错误,则用户空间程序编译成功。
-
在新版本的内核中,用户空间的命令已经发生了变化只有两个程序usbipd和usbip。进入userspace/src目录下,运行./usbipd –D命令,开启守护进程。然后运行./usbip 命令,查看帮助信息。Usbip用的多的命令是:./usbip list –l 列举本地上usb设备,./usbip bind –busid=<busid>,把特定设备绑定到usbip-host.ko上,这里的<busid>是./usbip list–l 命令查看得到的。如果没有报错,就表示把服务端的设备已经绑定到了usbip-host.ko上面了。
需要注意的是在运行./usbip命令式如果出现无法打开usb.ids这样的错误,可以根据错误自己建立相应的目录,并把/usr/share目录下的usb.ids文件拷贝到已建立的相应目录下。
(二)客户端
1、客户端需要加载的内核驱动模块式usbip-core.ko 和vhci-hcd.ko,首先当然是加载这两个木块,存放目录和服务端一样,加载方式也一样,不在赘述。
2、编译userspace程序,同服务端完全一样,不在赘述。
3、与服务端不同的是在client端,我们只需要./usbip命令,首先运行./usbip list –remote=<server端IP地址>,该命令可以查看到服务端绑定到usbip-host.ko上的设备以及busid。运行./usbip attach <ip地址> <busid>(这个命令具体不记得了,可以运行./usbip自己查看usage)。如果没有报错,这样就成功吧服务端的usb设备映射到了客户端了。
-
opensuse12.3(server)<——>winxp(client)
-
服务端
服务端和opensuse12.3(server)<——>opensuse12.3(client)完全一样,这里不再赘述。
-
Client端
(1)这里需要在官方网上下载windows下的驱动和userspace代码。并且按照useage和readme说明文档上的方法把驱动安装完成,具体做法很简端,但是写起来很麻烦,就不写了。
(2)这里需要注意的是userspace目录下的命令,与服务端大大不同,应为服务端有linux内核一直在维护,所以服务端的userspace已经跟新了,但是windows端的userspace却依然很原始,没有更新。
(3)client端的userspace需要重新编译,本人使用了vs2010和vs2013分别编译过,均可成功,低版本的vs就不一定能够编译成功了,建议最好使用vs2010以上的版本编译,会在usersapce/src目录下面生成usbip.exe可执行文件。
(4)需要将usb.ids文件拷贝到userspace/src/Debug目录下。在dos界面下,运行usbip.exe,本人在云心该命令是报了很奇怪的错误,还是一个对话框弹出的。经过跟踪,发现是在处理usb.ids文件时出错。建议把usb.ids文件打开,删除一大部分。然后在运行,就不会报错了。
(5)具体的usbip.exe用法,只需要执行usbip.exe查看即可,与linux下的userspace下的./usbip略有不同。原因在于此版本的userspace程序版本较老,不过,只要按照usbip.exe运行后提示的命令操作,看起来也没有什么难的。