blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

USBをIPを通して使う

いきさつ

UVCカメラをIP上で使いたいな、と思ったわけですが、 sshでモニタリングするよりも、USBを手元のPCで認識する方がスマートな方法かと。 そこでusbipを使ってみます。

usbip

以下の2つをインストールすればOKみたい。

install

$ sudo apt-get install usbip usbip-source

setting

そして以下のコマンドを打ちます。

$ m-a prepare
$ m-a update
$ m-a a-i usbip-source

しかし、最後の行で失敗します。 これは、以前からバグとして報告されていますが、 kernelのバージョンごとに対応ができたりできてなかったりで、 Ubuntu12.10でも13.04でもダメでした。 もうちょっと解決方法調べてみます。

解決しました@2014/05/18

環境をUbuntuからDebian7.5に変えたところうまく行きました。 ホスト側もクライアント側もUbuntuではだめでした。

install

ホスト側もクライアント側も同じです。

$ sudo apt-get install usbip

host side

準備は以下の3行で終わります。

$ sudo modprobe usbip-core
$ sudo modprobe usbip-host
$ sudo usbip -D

以下のコマンドを打つと、ホスト側に接続されているusb機器が列挙されます。

$ sudo usbip list -l

以下が出力された結果。 usbハブとキーボードとwebカメラが認識されてます。

Local USB devices
=================
 - busid 1-1 (05e3:0606)
   Genesys Logic, Inc. : USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub (05e3:0606)
         1-1:1.0 -> hub

 - busid 1-1.1 (099a:0638)
   Zippy Technology Corp. : Sanwa Supply Inc. Small Keyboard (099a:0638)
         1-1.1:1.0 -> usbhid
         1-1.1:1.1 -> usbhid

 - busid 1-1.3 (046d:0825)
   Logitech, Inc. : Webcam C270 (046d:0825)
         1-1.3:1.0 -> uvcvideo
         1-1.3:1.1 -> uvcvideo
         1-1.3:1.2 -> snd-usb-audio
         1-1.3:1.3 -> snd-usb-audio

ここでwebカメラのbusidを確認し、webカメラを外部に公開します。

$ sudo usbip bind -b 1-1.3

これでホスト側の準備は完了です。 公開を停止したい場合はunbindすればOKです。

$ sudo usbip unbind -b 1-1.3

client side

準備は以下の2行で終わります。

$ sudo modprobe usbip-core
$ sudo modprobe vhci-hcd

以下のコマンドでホスト側のusbのbusidを確認します。

$ sudo usbip list -r host.local

以下が出力された結果。

Exportable USB devices
======================
 - beagle.local
      1-1.3: Logitech, Inc. : Webcam C270 (046d:0825)
           : /sys/devices/ocp.3/47400000.usb/musb-hdrc.1.auto/usb1/1-1/1-1.3
           : Miscellaneous Device / ? / Interface Association (ef/02/01)
           :  0 - Video / Video Control / unknown protocol (0e/01/00)
           :  1 - Video / Video Streaming / unknown protocol (0e/02/00)
           :  2 - Audio / Control Device / unknown protocol (01/01/00)
           :  3 - Audio / Streaming / unknown protocol (01/02/00)

そして確認したbusidを使ってローカルのUSBとして紐付けます。

$ sudo usbip -h host.local -b 1-1.3

これでクライアント側でホスト側のusb機器が使用できます。

参考URL