usbip开源项目的源代码可以在官方网站上下载,源码目录下也有Readmeusage说明文档,但是由于年代久远,已经不适合现在的系统使用了。这次实验平台的搭建采用了如下两种环境:

ubuntu14.04server<——>ubuntu14.04client;

ubuntu14.04(server)<——>windows(client)

一、ubuntu14.04server<——>ubuntu14.04client

1、服务端

  1. 首先要保证serverclient端的ubuntu14.04系统安装了内核源码树,如果没有可以查看当前系统的内核版本,然后到Linux内核官网下载对应版本的源码。

  2. 在终端运行命令/lib/modules/3.13.0-46-generic/kernel/drivers/staging/,进入目录,然后运行insmodusbip-core.koinsmod usbip-host.ko命令加载server端的驱动模块。

  3. 将用户空间程序从内核源码树种拷贝出来。运行命令

    / cd /usr/src/3.13.0-46-generic/drivers/staging/usbip/userspace/,进入到存放用户空间代码的目录,把整个userspace目录拷贝到home目录下。

  4. 重新编译userspace目录下的代码。在编译这部分代码之前需要安装sysfsutils等依赖包,这些可以在网上下载源码,让后执行./configure makemake install安装,在此不废话。安装完成依赖包包之后,进入到userspace目录下,依次运行

    ./autogen.sh

    ./configure

    make install 

    如果没有错误,则用户空间程序编译成功。

在新版本的内核中,用户空间的命令已经发生了变化只有两个程序usbipdusbip(旧版包含usbip、usbipd、usbip_bind_driver三个程序

进入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文件拷贝到已建立的相应目录下。

2 客户端

1、客户端需要加载的内核驱动模块式usbip-core.ko vhci-hcd.ko,首先当然是加载这两个木块,存放目录和服务端一样,加载方式也一样,不在赘述。

2、编译userspace程序,同服务端完全一样,不在赘述。

3、与服务端不同的是在client端,我们只需要./usbip命令,首先运行./usbip list –remote=<serverIP地址>,该命令可以查看到服务端绑定到usbip-host.ko上的设备以及busid。运行./usbip attach <ip地址>  <busid>(这个命令具体不记得了,可以运行./usbip自己查看usage)。如果没有报错,这样就成功吧服务端的usb设备映射到了客户端了。


二、ubuntu14.04server<——>windowsclient


1 服务端

服务端和ubuntu14.04server<——>ubuntu14.04client)完全一样,这里不再赘述。

Client

(1)这里需要在官方网上下载windows下的驱动和userspace代码。并且按照useagereadme说明文档上的方法把驱动安装完成,具体做法很简端,但是写起来很麻烦,就不写了。

(2)这里需要注意的是userspace目录下的命令,与服务端大大不同,应为服务端有linux内核一直在维护,所以服务端的userspace已经跟新了,但是windows端的userspace却依然很原始,没有更新。

(3)client端的userspace需要重新编译,本人使用了vs2010vs2013分别编译过,均可成功,低版本的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运行后提示的命令操作,看起来也没有什么难的。