usbip--局域网内共享的USB设备
目錄(?)[-]
usbip的目的是為了開發一個在局域網內共享的USB設備,也就是說你可以直接訪問局域網內其他計算機的USB設備。在網上看到一篇如何安裝usbip的文章,不過是英文,先轉載保存,有時間再翻譯下。
有關它的詳細情況可參考其官方網站:http://usbip.sourceforge.net/
轉載地址:http://www.howtoforge.com/how-to-set-up-a-usb-over-ip-server-and-client-with-ubuntu-10.04
?
This tutorial shows how to set up a USB-over-IP server with Ubuntu 10.04 as well as a USB-over-IP client (also running Ubuntu 10.04). The?USB/IP Project?aims to develop a general USB device sharing system over IP?network. To share USB devices between computers with their full functionality, USB/IP encapsulates "USB I/O messages" into TCP/IP payloads and transmits them between computers. USB-over-IP can be useful for virtual machines, for example, that don't have access to the host system's hardware - USB-over-IP allows virtual machines to use remote USB devices.
I do not issue any guarantee that this will work for you!
?
1 Preliminary Note
This tutorial is based on AliRezaTaleghani's tutorial?How To Modify Your Gnu/Linux Box To Serve As A USB Over IP Server, but I've adjusted it for Ubuntu 10.04 (server and client). If you want to use a?Windows?client, please take a look at AliRezaTaleghani's tutorial - that part is still the same.
In this tutorial I use the server?server1.example.com?with the IP address?192.168.0.100?and the client?client1.example.com?with the IP address192.168.0.101, both running Ubuntu 10.04. These settings might differ for you, so you have to replace them where appropriate.
?
2 Installing And Using USB/IP On The Server
server1:
We can install?usbip?as follows:
aptitude install usbip
Afterwards we load the?usbip?kernel modules:
modprobe usbip
modprobe usbip_common_mod
To check if they really got loaded, run:
lsmod | grep usbip
The output should be similar to this?one:
root@server1:~#?lsmod?|?grep?usbip
usbip??????????????????15124??0
usbip_common_mod???????13605??1?usbip
root@server1:~#
To make sure that both modules get loaded automatically whenever you boot the system, you can add them to?/etc/modules:
vi /etc/modules
| [...] usbip usbip_common_mod |
Now we can start the?usbip?daemon:
usbipd -D
root@server1:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!
root@server1:~#
?
Now attach a USB device that you want to export to the server - I'm using a SanDisk USB?flashdrive here.
Execute the command
lsusb
to find the corresponding Vendor/Device ID which is in the form of:
Bus XXX Device YYY: ID VendorID:DeviceID
The output on my server is as follows:
root@server1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@server1:~#
The Vendor/Device ID of my SanDisk USB flash drive is?0781:5151.
Now run
usbip_bind_driver --list
The output on my server is as follows:
root@server1:~#?usbip_bind_driver?--list
List?USB?devices
?-?busid?1-1?(0781:5151)
?????????1-1:1.0?->?usb-storage
root@server1:~#
As you see, the Vendor/Device ID of my SanDisk USB flash drive (0781:5151) corresponds to the BUSID?1-1. We need this BUSID to attach the USB device to the server:
usbip_bind_driver --usbip 1-1
root@server1:~#?usbip_bind_driver?--usbip?1-1
**?(process:765):?DEBUG:??1-1:1.0???????->?usb-storage
**?(process:765):?DEBUG:?unbinding?interface
**?(process:765):?DEBUG:?write?"add?1-1"?to?/sys/bus/usb/drivers/usbip/match_busid
**?Message:?bind?1-1?to?usbip,?complete!
root@server1:~#
That's it, we can now use the SanDisk USB flash drive on a remote?usbip?client.
BTW, if you run...
netstat -tap
... you should see that the?usbip?daemon is listening on port 3240 so please make sure that this port isn't blocked by your firewall:
root@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?*:ssh???????????????????*:*?????????????????????LISTEN??????537/sshd
tcp????????0??????0?*:3240??????????????????*:*?????????????????????LISTEN??????762/usbipd
tcp????????0?????52?server1.example.com:ssh?192.168.0.199:4024??????ESTABLISHED?667/0
tcp6???????0??????0?[::]:ssh????????????????[::]:*??????????????????LISTEN??????537/sshd
root@server1:~#
?
3 Installing And Using USB/IP On The Client
client1:
We must install?usbip?on the client as well:
aptitude install usbip
Afterwards we load the?vhci-hcd?kernel module:
modprobe vhci-hcd
To check if it really got loaded, run:
lsmod | grep vhci_hcd
The output should be similar to this one:
root@client1:~#?lsmod?|?grep?vhci_hcd
vhci_hcd???????????????19800??0
usbip_common_mod???????13605??1?vhci_hcd
root@client1:~#
To make sure that the module gets loaded automatically whenever you boot the system, you can add it to?/etc/modules:
vi /etc/modules
| [...] vhci-hcd |
Now connect to the?usbip?server and get a list of available USB devices:
usbip -l 192.168.0.100
(192.168.0.100?is the IP address of the?usbip?server.)
You should find the SanDisk USB flash drive in the output (BUSID?1-1):
root@client1:~#?usbip?-l?192.168.0.100
-?192.168.0.100
?????1-1:?SanDisk?Corp.?:?Cruzer?Micro?Flash?Drive?(0781:5151)
????????:?/sys/devices/pci0000:00/0000:00:07.2/usb1/1-1
????????:?(Defined?at?Interface?level)?(00/00/00)
????????:??0?-?Mass?Storage?/?SCSI?/?Bulk?(Zip)?(08/06/50)
root@client1:~#
To attach that device to the client, run:
usbip -a 192.168.0.100 1-1
root@client1:~# usbip -a 192.168.0.100 1-1
8 ports available
port 0 attached
root@client1:~#
Now run...
lsusb
... and you should find the remote USB device in the output on the client:
root@client1:~#?lsusb
Bus?001?Device?002:?ID?0781:5151?SanDisk?Corp.?Cruzer?Micro?256/512MB?Flash?Drive
Bus?001?Device?001:?ID?1d6b:0002?Linux?Foundation?2.0?root?hub
root@client1:~#
You can now use the remote USB device as if it was a local USB device (e.g. mount it, format it, write to it, read form it, etc.).
?
4 Detaching A Remote USB Device
A remote USB device can be detached as follows:
client1:
Run...
usbip --port
... to find out the port that the remote USB device uses on the client - in this case it's port?00:
root@client1:~#?usbip?--port
8?ports?available
Port?00:?<Port?in?Use>?at?High?Speed(480Mbps)
???????SanDisk?Corp.?:?Cruzer?Micro?256/512MB?Flash?Drive?(0781:5151)
???????1-1?->?usbip://192.168.0.100:3240/1-1??(remote?devid?00010002?(bus/dev?001/002))
???????1-1:1.0?used?by?usb-storage
???????????/sys/class/bsg/1:0:0:0/device
???????????/sys/class/scsi_device/1:0:0:0/device
???????????/sys/class/scsi_disk/1:0:0:0/device
???????????/sys/class/scsi_host/host1/device
???????????/sys/class/usb_endpoint/usbdev1.4_ep02/device
???????????/sys/class/usb_endpoint/usbdev1.4_ep81/device
???????????/sys/block/sdb/device
Port?01:?<Port?Available>
Port?02:?<Port?Available>
Port?03:?<Port?Available>
Port?04:?<Port?Available>
Port?05:?<Port?Available>
Port?06:?<Port?Available>
Port?07:?<Port?Available>
root@client1:~#
We need the port number to detach the device:
usbip -d 00
root@client1:~# usbip -d 00
8 ports available
port 0 detached
root@client1:~#
On the server, we use the BUSID (1-1) to bind the USB device to the local system (the?--other?switch binds the device to the local system so that it is not available over the network anymore):
server1:
usbip_bind_driver --other 1-1
root@server1:~# usbip_bind_driver --other 1-1
** (process:7333): DEBUG: write "del 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to other drivers than usbip, complete!
root@server1:~#
Now go back to the client and check if the remote USB device is still available:
client1:
lsusb
If all goes well, it shouldn't be listed anymore:
root@client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@client1:~#
?
5?Links
- USB/IP Project:?http://usbip.sourceforge.net/
- Ubuntu:?http://www.ubuntu.com/
6 注意事項
如果你的電腦安裝了Daemon Tools,那是用不了usbip的,卸載了它才行。至于原因,還沒有找到。windows客戶端下載usbip_windows_v0.2.0.0_signed.zip(win7)或者usbip_windows_v0.1.0.0_signed(win XP),否則可能會出現莫名其妙的錯誤。解壓了之后,這樣安裝一個虛擬USB設備(USB/IP Enumerator):
win XP:控制面板>添加硬件>下一步>是,我已經連接了硬件>添加新的硬件設備>安裝我手動從列表選擇的硬件(高級)>系統設備>從磁盤安裝>選擇USBIPEnum.inf
win7:設備管理器>操作>添加過時硬件>安裝我手動從列表選擇的硬件>系統設備>從磁盤安裝>選擇USBIPEnum.inf
然后打開命令窗口,去到解壓到目錄,首先查看可用設備,看到類似下面的結果,就是有可用設備。
?D:\usbip_windows_v0.2.0.0_signed>usbip -l 192.168.1.155
?- 192.168.1.155
?????1-1: Z-Star Microelectronics Corp.?: ZC0301 WebCam (0ac8:301b)
????????: /sys/devices/platform/bcm63xx_ohci.0/usb1/1-1
????????: Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
????????: 0 - Vendor Specific Class / Vendor Specific Subclass / Vendor Specifi
?c Protocol (ff/ff/ff)
然后再運行 usbip -a 192.168.1.155 1-1,正常的話,windows就會提示找到USB設備,安裝驅動,就看到新的USB設備了。
原文:http://blog.csdn.net/yangbingzhou/article/details/44487573
總結
以上是生活随笔為你收集整理的usbip--局域网内共享的USB设备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT根据参数绘制图形+重复绘制路径的简单
- 下一篇: 启动mongo数据库