USB over IP (Ethernet)
参照
TODO:他に検討したものなどを載せる
結論
- 正常に動きませんでした
Target | Version | OS |
---|---|---|
Server | 0.1.7 | Debian GNU/Linux squeeze 64bit |
Client | 0.2.0.0_signed | Windows Server 2008 Web Server Edition 32bit |
Windowsドライバの動きがいまいち良くない。
データの受け渡しは正常なのだが、イベントループに戻るとき、0バイトのデータが転送されて、異常終了してしまう。
コメントにも、Windiows DDKのサンプルを基にして作ったけど、GNUにして公開できるほど完璧ではないという記述があったので、まだまだ、テスト中らしい。
概要
- USB/IP Project
- サーバーは Debian GNU/Linux (squizz)
- クライアントは Microsoft Windows 2008 Server Web Server Edition
- 要はWindows Vista のようなものと思っていただければ結構
Linux 側の準備
インストール
debianの場合、installコマンドで最新のパッケージをインストールできる。
$ sudo aptitude install usbip
早速実行してみるが....
$ sudo usbipd -D usbip err: stub_driver.c: 33 (open_sysfs_stub_driver) usbip_common_mod.ko and usbip.ko must be loaded ** ERROR **: driver open failed aborting... $ sudo usbip_bind_driver --list List USB devices
$ sudo modprobe usbip $ sudo lsmod | grep usbip usbip 11561 0 usbip_common_mod 8489 1 usbip usbcore 122562 7 usbip,usb_storage,usblp,usbhid,uhci_hcd,ehci_hcd
デバイスをロードできたみたいなので、デーモンを起動する
$ sudo usbipd -D Bind usbip.ko to a usb device to be exportable! $ ps -Af | grep usbip root 2223 1 0 00:53 ? 00:00:00 usbipd -D user 2227 32244 0 00:54 pts/0 00:00:00 grep usbip $ netstat -ano | grep 3240 tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN オフ (0.00/0/0)
Windows 側の準備
ドライバをインストールする
スクリーンショットを張る!→無駄になったけど。
管理者権限で「コンピュータの管理」を開き、レガシデバイスの追加を行う。
そのまま「次へ」。
詳細設定にして「次へ」。
そのまま「次へ」。
そのまま「ディスクの使用」を選択。
展開したフォルダを選択して、「OK」を押す。
正しいドライバが選択されているか確認し、「次へ」。
「次へ」を押して、ドライバのインストールを行う。
完了すると次のような画面になる。
USBを関連付ける
情報を取得する。
C:\app\tool\usbip_0.2.0.0_signed>usbip -l 192.168.0.4 - 192.168.0.4 C:\app\tool\usbip_0.2.0.0_signed>usbip -l 192.168.0.4 - 192.168.0.4 3-1: Canon, Inc. : MP*** ser (****:****) : /sys/devices/pci0000:00/0000:00:**.*/usb3/3-1 : (Defined at Interface level) (00/00/00) : 0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff) : 1 - Printer / Printer / Bidirectional (**/01/ff) : 2 - Mass Storage / SCSI / Bulk (Zip) (**/06/ff)
接続する。
C:\app\tool\usbip_0.2.0.0_signed>usbip.exe -a 192.168.0.4 3-1
これで接続できるはず...なのだが、なぜかデバイスの認識中にエラーとなる。
デバッグ中...
C:\tag\usbip_windows-0.2.0.0\Debug>usbip.exe -D -a 192.168.0.4 3-1 usbip for windows ($Id: usbip.c 176 2011-04-02 21:25:46Z arjanmels $) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip_network.c: 268 (tcp_connect ) trying 192.168.0.4 port 3240 usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip_network.c: 288 (tcp_connect ) connected to 192.168.0.4:3240 usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 139 (query_interface0) exportable 1 devices usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 156 (query_interface0) 3-1: unknown vendor : unknown product (****:****) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 157 (query_interface0) : /sys/devices/pci0000:00/0000:00:**.*/usb3/3-1 usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 158 (query_interface0) : (Defined at Interface level) (00/00/00) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 178 (query_interface0) : 0 - unknown class / unknown subclass / unknown protocol (ff/00/ff) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 178 (query_interface0) : 1 - unknown class / unknown subclass / unknown protocol (**/01/ff) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 178 (query_interface0) : 2 - unknown class / unknown subclass / unknown protocol (**/06/ff) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 181 (query_interface0) usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip_network.c: 268 (tcp_connect ) trying 192.168.0.4 port 3240 usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip_network.c: 288 (tcp_connect ) connected to 192.168.0.4:3240 usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 208 (import_device) call from attch here usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 210 (import_device) return from attch here usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 217 (import_device) devfd:004***** new usb device attached to usbvbus port 1 usbip err: C:\tag\usbip_windows-0.2.0.0\usbip_vbus_ui.c: 466 (sock_read_completed) incomplete header 1 997 usbip err: C:\tag\usbip_windows-0.2.0.0\usbip_vbus_ui.c: 356 (write_to_dev) read from sock ret 0 not equal a usbip_header usbip err: C:\tag\usbip_windows-0.2.0.0\usbip_vbus_ui.c: 357 (write_to_dev) usbip_header: 48 usbip err: C:\tag\usbip_windows-0.2.0.0\usbip_vbus_ui.c: 358 (write_to_dev) usbip_header: 48 usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 307 (attach_device) closing connection to device usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 310 (attach_device) detaching device usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 313 (attach_device) closing connection to peer usbip dbg: C:\tag\usbip_windows-0.2.0.0\usbip.c: 316 (attach_device) done
実際、正常に接続される場合は、このまま放置すれば、USBデバイスの使用が可能。
USBの使用を終了する場合は、Ctrl+Cで閉じることが出来る。
ただ、サスペンドや、休止モードにしたときの挙動も怪しそうなので、テストする必要あり。
終了/アンインストール
Linux 側の終了
終了する場合はkillコマンドで。
$ ps -Af | grep usbip root 2223 1 0 00:53 ? 00:00:00 usbipd -D user 2227 32244 0 00:54 pts/0 00:00:00 grep usbip $ sudo kill 2223 $ ps -Af | grep usbip user 2251 32244 0 00:54 pts/0 00:00:00 grep usbip
ドライバのアンロード
$ sudo rmmod usbip usbip_common_mod
$ lsmod | grep usbip
付録
Windowsクライアント
usbip のコマンドライン引数
短いコマンド | 長いコマンド | オプション | 説明 |
---|---|---|---|
-a | --attach | [host] [bus_id] | リモートのhostのbus_idに接続します |
-d | --detach | [ports] | portの接続を解除します |
-l | --list | [hosts] | hostsで公開中のUSBデバイスリストを表示します |
-p | --port | なし | 仮想USBポートの状態の一覧を表示します |
-D | --debug | なし | デバッグ情報を表示します(開発者向け) |
-v | --version | なし | バージョン情報を表示します |
-h | --help | なし | ヘルプを表示します |