USB/IP Share USB-Device On Ubuntu 12.04

USBIPD Share usb-Device On Ubuntu 12.04

讓 USB裝置 以 Server-Client 架構分享使用。可以省去不必要的裝置插拔與裝置共享的目的。例如:usb-keypro、讀卡機、隨身碟、Web-cam、等等的裝置都可以用來分享使用。要透過網路分享共用USB裝置,需要安裝「usbip」套件。Ubuntu 12.04 版本已在系統核心樹上提供USBIP的驅動程式,「The drivers were already in the kernel tree since version 2.6.28.」。

下面是USB/IP的專案介紹,但專案程式已不在此做更新發佈,因為專案已被納到 「linux kernel tree staging」核心樹下。在此主要是提供Windows-Client 最新版本執行檔及驅動程式下載 。

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. Download the latest version, or check it out by Subversion.

透過 google 搜尋 usbip 能找到很多相關的安裝使用文章,但大多數的文章所講述USBIP版本並非用目前最新核心 3.2.0.x 版本所對應的。就以我對  Ubuntu-Desktop 12.04 系統安裝設定「USBIP」為例,說明安裝時所遭遇的問題。

開始用最簡單 的方法來下載安裝 USBIP ,當然用 apt-get install usbip 是最簡單不過的事情了。的確,很容易的就下載安裝完成。但是 USDBIP 服務都無法啟動,僅拋出一句「usbipd: symbol lookup error: usbipd: undefined symbol: stub_driver」錯誤訊息,簡單的帶過一切。奇怪了!從Ubuntu官方套件庫下載安裝的套件,怎麼不能用啊!會不會是哪裏沒有設定好呢?之後看了很多文章也試了很多方法,總結就是等套件或系統核心更新後,再看問題是否已解決。一下子三個月就過去了,為了補上之前的筆記。所以又重新再試著由套件庫安裝USBIP,但終究測試還是以失敗收場。直到找到這篇文章「USB-Geräte im Netz durchreichen」,探其內容最後終於開通了,也成功由安裝設定測試一次到位。關鍵在於「要從 linux-source 裏,自已編譯安裝USBIP套件」。

手動安裝USBIP套件在 Ubuntu 12.04

下載 linux-source:先前有提到 usbip 已被納到 linux-kernel-tree 的 staging tree 之下。

# sudo apt-get install linux-source

linux-source 路徑 由 uname -r 命令得知我的 Ubuntu 目前版本為「3.2.0-36-generic」,因此 linux-source 被下在到 「/usr/src/linux-source-3.2.0/linux-source-3.2.0.tar.bz2」存放。

解開壓縮檔 linux-source-3.2.0.tar.bz2 在當前目錄下

# sudo tar -xjvf /usr/src/linux-source-3.2.0/linux-source-3.2.0.tar.bz2

切換到 usbip-source 編譯目錄下,相對路徑為「linux-source-3.2.0/drivers/staging/usbip/userspace/」,再利用 autogen.sh 腳本產生初始設置檔。

# cd linux-source-3.2.0/drivers/staging/usbip/userspace
# sudo ./autogen.sh

配置、編譯與安裝 USBIP, 接下來的步驟與一般手動安裝套件的方式是一樣的執行「./config」及「make」和「make install」。唯一要注意的事情就是「config.h」標頭檔中宣告的 usbip-utils 的版號(1.1.1)較新與 windows-client usbip 目前最新版號(1.0.6)無法對應。造成無法正常與遠端服務溝通與掛載遠端USB裝置的問題,錯誤訊息可能像是「usbip: debug: usbip_network.c:149:[usbip_net_recv_op_common] version mismatch: 262 273」。所以必須將 config.h 中的版號改為 1.0.6 時的一致值。

配置檔「config.h」會在完成 「./configure」命令後產生。
配置安裝前 最好先看一下「README」說明檔,其中包含了 Requirements, Install, Usage, Example 幾個項目。除了README所提及到的套件外,似乎也要先安裝「libsysfs-dev」套件

# sudo sed -i 's%USBIP_VERSION 0x00000111%USBIP_VERSION 0x00000106%g'  config.h
# sudo ./configure --prefix=/usr --sysconfdir=/etc
# sudo make install

載入 USBIP 核心模組,可以手動自已載入「usbip-core、usbip-host、vhci-hcd」三個必要的模組或是寫入設定檔在開機時自動載入相關模組。

手動 或第一次載入模組

modprobe -l |grep usbip
sudo modprobe -a usbip-core usbip-host vhci-hcd

自動 設定開機載入相關模組,編輯「/etc/modules」將三個模組名稱以三行字串寫入設定檔中。

# sudo vim /etc/modules

#+++++++++++++++++++++++++++++++++++++++++
usbip-core
usbip-host
vhci-hcd
#+++++++++++++++++++++++++++++++++++++++++

完成 上面的設定,就已經能正常的啟動 USBIP 服務了。

啟動 USBIP 服務與如何設定分享共用USB裝置

啟動 USBIP 服務

# sudo usbipd -D

條列已接上Server端上的USB裝置

# sudo usbip list -l

綁定USB裝置至USBIP服務( 1-1 是分享的裝置 busid 代號)

# sudo usbip bind -b 1-1

完成 上面三個步驟 USB裝置已分享。

usbip 指令說明: 包含 掛載、缷載、綁定與反綁定和條列 USB 裝置 相關說明

usage: usbip [--debug] [--log] [version] [help]
  attach     Attach a remote USB device
  detach     Detach a remote USB device
  list       List exportable or local USB devices
  bind       Bind device to usbip-host.ko
  unbind     Unbind device from usbip-host.ko

讓 Windows-client 使用 Usbip 服務掛載遠端USB裝置

下載最新版本 http://usbip.sourceforge.net/  能找到usbip_windows_v0.2.0.0_signed.zip (日期 20130117 )。

解開壓縮檔,將檔案解壓縮至家目錄。

安裝 USBIP 虛擬硬體裝置

控制台 》新增硬體 》硬體是否已連接(是) 》 新增硬體裝置 》安裝我從清單中手動選取的硬體 》所有裝置 》從磁片安裝 》瀏覽(指定USBIP解壓縮檔案所在路徑 USBIPEnum.inf)確定 》完成 安裝USB/IP Enumerator 。

開啟命令提示字元 》切換至 USBIP 解壓縮目錄下 》執行 USBIP 操作,列出Server端上分享的裝置並將它掛載到本機電腦上。

> usbip.exe -l 192.168.128.189
> usbip.exe -a 192.168.128.189 1-1

Windows-client 「usbip」指命操作說明

Usage: usbip [options]
	-a, --attach [host] [bus_id]
		Attach a remote USB device.

	-d, --detach [ports]
		Detach an imported USB device.

	-l, --list [hosts]
		List exported USB devices.

	-p, --port
		List virtual USB port status.

	-D, --debug
		Print debugging information.

	-v, --version
		Show version.

	-h, --help
		Print this help.

出現缺少 libusbip.so 的錯誤訊息「
usbipd: error while loading shared libraries: libusbip.so.0: cannot open shared object file: No such file or directory
」,其實這只是安裝過程中沒將 libusbip 相關的函式物件複製到「/usr/lib」目錄下而已。會出現錯誤,代表安裝配置時沒給正確的參數值像是「./configure –prefix=/usr –sysconfdir=/etc」。當然在配置安裝檔時也可不帶任何參數,只是最後需要自行複製「libusbip.so、libusbip.so.0、libusbip.so.0.0.1」三個檔案至「/usr/lib」目錄。

7 thoughts on “USB/IP Share USB-Device On Ubuntu 12.04

  1. 通告: USBIP Share USB-Device On Ubuntu 12.04 | jfo planet

  2. 謝謝您的分享
    請問我在sudo apt-get install linux-source後
    uname -r 後確認為3.16.0-31-generic
    sudo tar -xjvf /usr/src/linux-source-3.16.0/linux-source-3.16.0.tar.bz2 回覆
    tar (child): /usr/src/linux-source-3.16.0/linux-source-3.16.0.tar.bz2: Cannot open: No such file or directory
    請問我該如何解決?
    謝謝

      • 謝謝你的答覆. 看來Server這邊可以了. 可是當我輸入usbip -l ipaddress會出現下列的錯誤
        usbip err: usbip_network.c: 124 recv op_common, -1
        usbip err: usbip.c: 412 recv op-common
        usbip err: usbip.c: 481 query
        再請教此為何原因? 我又該如何修正呢
        謝謝!

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s