usbip开源项目的源代码可以在官方网站上下载,源码目录下也有Readme和usage说明文档,但是由于年代久远,已经不适合现在的系统使用了。这次实验平台的搭建采用了如下两种环境:
ubuntu14.04(server)<——>ubuntu14.04(client);
ubuntu14.04(server)<——>windows(client)。
一、ubuntu14.04(server)<——>ubuntu14.04(client)
1、服务端
-
首先要保证server和client端的ubuntu14.04系统安装了内核源码树,如果没有可以查看当前系统的内核版本,然后到Linux内核官网下载对应版本的源码。
-
在终端运行命令/lib/modules/3.13.0-46-generic/kernel/drivers/staging/,进入目录,然后运行insmodusbip-core.ko和insmod usbip-host.ko命令加载server端的驱动模块。
-
将用户空间程序从内核源码树种拷贝出来。运行命令
/ cd /usr/src/3.13.0-46-generic/drivers/staging/usbip/userspace/,进入到存放用户空间代码的目录,把整个userspace目录拷贝到home目录下。
-
重新编译userspace目录下的代码。在编译这部分代码之前需要安装sysfsutils等依赖包,这些可以在网上下载源码,让后执行./configure 、make、make install安装,在此不废话。安装完成依赖包包之后,进入到userspace目录下,依次运行
./autogen.sh
./configure
make install
如果没有错误,则用户空间程序编译成功。
在新版本的内核中,用户空间的命令已经发生了变化只有两个程序usbipd和usbip(旧版包含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=<server端IP地址>,该命令可以查看到服务端绑定到usbip-host.ko上的设备以及busid。运行./usbip attach <ip地址> <busid>(这个命令具体不记得了,可以运行./usbip自己查看usage)。如果没有报错,这样就成功吧服务端的usb设备映射到了客户端了。
二、ubuntu14.04(server)<——>windows(client)
1 服务端
服务端和ubuntu14.04(server)<——>ubuntu14.04(client)完全一样,这里不再赘述。