[BitVisor-devel:76] Re: USBデバイスが突然stallする
Hideki EIRAKU
hdk @ igel.co.jp
2016年 3月 16日 (水) 14:25:25 JST
フィールドストーン 八木様
榮樂です。こんにちは。
From: 八木 豊志樹 <toshiki.yagi @ field-stone.jp>
Subject: [BitVisor-devel:75] USBデバイスが突然stallする
Date: Mon, 14 Mar 2016 21:52:00 +0900
> 現在USBデバイスを実際にBitvisor上で動作させた上で
> ゲストからの通信をhookするか決定する仕組みを実装
> しようとしています。
> そのために libftdi-0.20を移植したUSBシリアルデバイス
> ドライバを new_usb_device() から呼び出すように実装
> したのですが、しばらく(1秒弱程度)するとUSBデバイス
> からの応答がなくなり、リトライを続けているとデバイス
> が stall したとのエラーが表示され以降そのデバイスへの
> アクセスがすべてエラーとなってしまいました。
>
> この場合、何に注目してデバッグをしていけばいいか
> ご教示頂けますでしょうか。
BitVisor から USB デバイスを直接扱うということかと思いますが、その場合
そのデバイスがゲスト OS からそのまま見えることがないようにされているで
しょうか。CCID (IC カードリーダー) の場合 usb_ccid.c にあるようにゲス
ト OS からは USB キーボードとして見えるような実装が入っています。現状
の BitVisor の EHCI 実装には、キーボードとして見せるのに必要な
interrupt 転送に対応していないため、EHCI には対応していません。
もし、ゲスト OS からのアクセスをそのまま通しつつ BitVisor からもデバイ
スを使いたい場合は、ゲスト OS と BitVisor のコマンドが混ざってデバイス
に届いたり、UHCI_TD_TOKEN_DT1_TOGGLE が不適切に設定されたりすることが
ないよう、注意深く実装をする必要があります。ちょっとしたミスによりデバ
イスの反応がなくなることはあります。
BitVisor のストレージ暗号化に使用されている仕組みはパッシブなもので、
ゲスト OS が発行したコマンドをフックしデータだけを暗号化したり復号した
りはしますが、BitVisor からデバイスに追加のコマンドを発行するのは、最
初のデバイス認識時の SETUP だけであるため、コマンドが混ざるなどの問題
は発生しません。
USB バスアナライザーを使用すると、誤ったデータが流れていることを簡単に
突き止められるため非常に便利ですが、ない場合は QH TD などのデータ構造
をダンプしてのデバッグになるかと思います。
--
Hideki EIRAKU <hdk @ igel.co.jp>
BitVisor-devel メーリングリストの案内