USB/IPを使用して仮想マシンにリモートのUSBデバイスを繋ぐ


DH-ONE/U2がリモートのデバイス。まだ動作はしていない。

追記 : この情報は古い。現在USB/IPはkernel.orgのカーネルに統合されていて、staging内に存在する。ただしユーザランドのツール、つまり各種コマンドのためにusbipのツールをビルドする必要は有る。

追記 : 現在usbipはWindows対応コードが書かれつつある。http://d.hatena.ne.jp/mjt/20090621/p2

共通の作業

  1. 適切なカーネルソースを導入
  2. http://usbip.sourceforge.net/ から適当にDL
  3. usbip-x.x.x/driversの適切なバージョンのディレクトリでmake KSOURCE=/usr/src/linux
  4. usbip_common_mod.ko vhci-hcd.ko usbip.koを/lib/modules/usbipなど掘って移動
  5. usbip-x.x.x/srcでautogen.sh、configure、make、make install

これを、デバイスを提供する方提供される方の両方で行う必要がある。
コマンドとして、bind_driver、usbaid、usbip、usbipdができる。

バイスを提供する方

  1. insmod usbip_common_mod.ko、insmod usbip.ko。
  2. usbipdを立ち上げる
  3. bind_driverでドライバをusbipの物に差し替える

バイスを提供される方

  1. insmod usbip_common_mod.ko、insmod vhci-hcd.ko。
  2. usbip -x HOSTNAMEとして全部付ける

他にも、IDを指定して付けたり等の機能がある。

TCP:3240を何らかの方法で到達可能にする必要がある。SSHのポート転送でも動作する。

バイスを提供する方が手元に有り、デバイスを提供されるホストがリモートであるなら、ssh HOSTNAME -R3240:127.0.0.1:3240 とし、その場でusbip -x localhostのようにすれば良い。

バイスを削除するときは、usbip -pで番号を確認し、usbip -d 0等として削除できる。

XenのHVMなWindowsドメインに付ける

普通のUSBデバイスと同様にできる。つまり、設定ファイルにusb=1を書き足し*1、さらにmonitor=1(qemu monitorを有効)した上で、ctrl-alt-2*2して、

  1. info usbhostしてデバイスのリストを確認
  2. usb_add host:x.xしてデバイスを装着

あとは、ctrl-alt-1して戻ればデバイスをインストールできる。

取り外しは、取り付けと同様にqemuのコンソールを使用して、

  1. info usbしてデバイスのリストを確認
  2. usb_del x.x

XenのDom0とusbmonとusbipの組み合わせが正常動作した試しが無い。tcpdumpやそれ系のプログラムで問題無くキャプチャそのものは出来る。

*1:普通、usbdevice='tablet'のために有効にしている気がするが。。

*2:CTRL→alt→2の順に押えないと何故か反応しない。。