首页 > *nix技术, 仿真虚拟 > usbip试用记录一:环境安装与初步测试

usbip试用记录一:环境安装与初步测试

2013年10月26日 发表评论 阅读评论 7,387 次浏览

官方网站:
http://usbip.sourceforge.net/

源码:
http://sourceforge.net/projects/usbip/files/
说明:因为从2.6.28版本以后,usbip代码已经放到了kernel mainline的staging目录,比如:
/home/lenky/下载/linux-3.11.6/drivers/staging/usbip
所以从sourceforge下载的主要是其windows版本的编译程序:
http://sourceforge.net/projects/usbip/files/usbip_windows/
以及其代码:
http://sourceforge.net/p/usbip/code/HEAD/tree/
或者从github上:https://github.com/spurious/usbip-windows-mirror

论文:
http://inet-lab.naist.jp/~eiji-ka/publications/remote-dev/acs11-hirofuchi.pdf
https://www.usenix.org/legacy/events/usenix05/tech/freenix/hirofuchi/hirofuchi.pdf

试验:
服务器端:ubuntu源里已经包含了usbip,但这里还是从头开始。

lenky@LenkyHost:~$ apt-cache search usbip
libusbip-dev - USB device sharing system over IP network (development files)
libusbip0 - USB device sharing system over IP network (shared library)
usbip - USB device sharing system over IP network
usbip-source - USB device sharing system over IP network (kernel module source)

环境:ubuntu 13-10,内核重新编译过,使用的是3.11.6,这是当前(2013-10-26)的最新稳定版内核。

lenky@LenkyHost:~$ uname -a
Linux lenky-Aspire-V5-471G 3.11.6 #1 SMP Fri Oct 25 23:25:15 CST 2013 i686 i686 i686 GNU/Linux
lenky@LenkyHost:~$ cat /etc/issue
Ubuntu 13.10 \n \l

3.11.6内核的编译比较简单:
1,解压内核:
lenky@LenkyHost:~/下载$ tar xf linux-3.11.6.tar.bz2
2,拷贝系统内核的.config作为新内核的配置:
lenky@LenkyHost:~/下载$ cd linux-3.11.6/
lenky@LenkyHost:~/下载/linux-3.11.6$ cp /usr/src/linux-headers-3.11.0-12-generic/.config ./
3,执行内核编译的通用几步:
lenky@LenkyHost:~/下载/linux-3.11.6$ sudo apt-get install libncurses5-dev //ubuntu默认没有装这个
lenky@LenkyHost:~/下载/linux-3.11.6$ sudo make menuconfig //看一下usbip的几个选项是否有选上,没有则请选上
lenky@LenkyHost:~/下载/linux-3.11.6$ sudo make all -j4; //4个cpu,所以以4个线程跑,加快编译速度
lenky@LenkyHost:~/下载/linux-3.11.6$ sudo make modules_install
lenky@LenkyHost:~/下载/linux-3.11.6$ sudo make install
4,重启机器进入新内核

编译usbip工具:
进入到内核staging下的usbip目录,编译userspace程序:
lenky@LenkyHost:~$ cd ~/下载/linux-3.11.6/drivers/staging/usbip/
lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip$ cd userspace/
lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ ./autogen.sh
lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ ./configure
lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ make
如出现错误,例如:

lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ sudo ./autogen.sh 
+ autoreconf -i -f -v
./autogen.sh: 9: ./autogen.sh: autoreconf: not found
lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ sudo apt-get install autoconf

lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ sudo ./configure
...
checking sysfs/libsysfs.h usability... no
checking sysfs/libsysfs.h presence... no
checking for sysfs/libsysfs.h... no
configure: error: Missing /usr/include/sysfs/libsysfs.h
lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ 
lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ sudo apt-get install libsysfs-dev sysfsutils libsysfs2

lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ sudo ./configure
...
configure: creating ./config.status
config.status: creating Makefile
config.status: error: cannot find input file: `libsrc/Makefile.in'

lenky@LenkyHost:/usr/src/linux-3.11.6/drivers/staging/usbip/userspace$ sudo ./autogen.sh 
...
autoreconf: running: automake --add-missing --copy --force-missing
libsrc/Makefile.am:5: error: Libtool library used but 'LIBTOOL' is undefined
libsrc/Makefile.am:5:   The usual way to define 'LIBTOOL' is to add 'LT_INIT'
libsrc/Makefile.am:5:   to 'configure.ac' and run 'aclocal' and 'autoconf' again.
libsrc/Makefile.am:5:   If 'LT_INIT' is in 'configure.ac', make sure
libsrc/Makefile.am:5:   its definition is in aclocal's search path.
autoreconf: automake failed with exit status: 1

请执行如下命令安装对应的依赖:
sudo apt-get install autoconf autotools-dev libsysfs-dev libglib2.0-dev sysfsutils libsysfs2 libtool

加载内核驱动:
lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ sudo insmod /lib/modules/3.11.6/kernel/drivers/staging/usbip/usbip-core.ko
lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ sudo insmod /lib/modules/3.11.6/kernel/drivers/staging/usbip/usbip-host.ko

查看系统的usb设备:

lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ ./src/usbip list -l
Local USB devices
=================
 - busid 1-1 (8087:0024)
   Intel Corp. : Integrated Rate Matching Hub (8087:0024)
         1-1:1.0 -> hub

 - busid 1-1.2 (090c:6200)
   Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : microSD card reader (090c:6200)
         1-1.2:1.0 -> usb-storage

 - busid 2-1 (8087:0024)
   Intel Corp. : Integrated Rate Matching Hub (8087:0024)
         2-1:1.0 -> hub

 - busid 3-2 (093a:2510)
   Pixart Imaging, Inc. : Optical Mouse (093a:2510)
         3-2:1.0 -> usbhid

 - busid 3-4 (064e:d251)
   Suyin Corp. : unknown product (064e:d251)
         3-4:1.0 -> uvcvideo
         3-4:1.1 -> uvcvideo

注意其中的microSD card reader,是我自己的一个当U盘使用的SD读卡器设备。通过如下命令对它进行绑定。此时ubuntu将自动隐藏掉对该设备的访问,即打开的SD卡文件夹自动弹出了。

lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ sudo ./src/usbip bind --busid 1-1.2
bind device on busid 1-1.2: complete

执行监控程序:加-D参数可以后台执行,但我这里为了看信息,所以没加。

lenky@LenkyHost:~/下载/linux-3.11.6/drivers/staging/usbip/userspace$ sudo ./src/usbipd 
usbipd: info: starting usbipd (usbip-utils 1.1.1)
usbipd: info: listening on 0.0.0.0:3240

客户端:
环境:Win7,32位,其实我在ubuntu里用virtulbox跑的一个win7虚拟机。
在Win7里按照usbip,步骤在usbip_windows_v0.2.0.0_signed包里的USAGE文件里有说明:

For Window 7 :
1. (Only necessary for custom builds: For x64 allow unsigned drivers: Enter "bcdedit /set testsigning on" in an administrative cmd window)
2. Uncompress the downloaded binary package to a directory.
3. Start a the Device Manager
4. Click Any hardware node
5. Choose "Add Legacy Hardware" from the "Action" menu
6. At the 'Welcome to the Add Hardware Wizard', click 'Next'.
7. Select 'Install the hardware that I manually select from the list'
8. click 'Next'
9. Click 'Have Disk', click 'Browse', choose the uncompressed directory, and click OK.
10. Click on the 'USB/IP Enumerator', and then click Next.
11. At 'The wizard is ready to install your hardware', click Next.
12. Click Finish at 'Completing the Add/Remove Hardware Wizard.' 

在执行对应的操作,出错了:

github下载usbip-windows端代码,用vs2012(原本是vs2010工程,但没关系,打开时会提示是否更新工程,可以点击更新)打开,然后点击生成->生成解决方案。
编辑程序执行参数:
调试->usbip属性…
命令参数加上:-l 192.168.56.1
在main函数默认加个断点,以便于查看显示的信息,否则程序运行后直接关闭了,看不到cmd。结果如下:

只是重新编译了usbip。就可以进行列表显示了,看来windows端的驱动没有问题。提示的那个usb.ids没有找到(它找的当前目录),没有影响,只是显示的信息不是很好懂而已。
让程序找到usb.ids,注意:需要把usb.id的12056行的“and”空格前的字符删除掉,否则程序执行时解析到这一行出assert错。

	034  \B4 and " (Accent Acute and Double Quotes)

接下来尝试客户端远程使用服务器端的usb设备,实验失败,原因暂不清楚。
客户端和服务器显示的信息如下:

今天先到这里了,未解决的问题下次继续。

转载请保留地址:http://www.lenky.info/archives/2013/10/2359http://lenky.info/?p=2359


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.