[BitVisor-devel:77] Re: USBデバイスが突然stallする
八木 豊志樹
toshiki.yagi @ field-stone.jp
2016年 3月 26日 (土) 08:41:39 JST
榮樂さん
ありがとうございます。
stallをおこす問題は usb_ccid.c を参考に一度ゲスト側からの
通信を遮断することで解決できました。ありがとうございます。
ただ、stallを起こしていた箇所で発生しているUSBデバイス
からの読み込みに失敗する件については直らなかったので、
プロトコルアナライザを使って実際の通信を確認してみました。
プログラム上では500msに1度usb_bulk_read を発行する動作と
なります。
その結果、以下の様な挙動を確認しました。
→ IN addr 02 ep 1
← D2 (18バイトデータ) (FTDIデバイスのモデムステータス+読みたいデータ)
→ ACK
→ IN addr 02 ep 1
← NAK
→ IN addr 02 ep 1
← NAK
(以下暫く続く)
→IN addr 02 ep 1
← DATA0 (2バイトデータ) (FTDIデバイスのモデムステータスのみ)
この間約720usでした。実際に読みたいデータが捨てられてしまっている
ように見えます。
なお、関係あるかどうかはわかりませんが、この状態でしばらく放置
している(500msに1度usb_bulk_read)と、
panic: Out of memory.
でbitvisorが落ちてしまいました。
この情報から何か分かることはありますでしょうか。
--
八木 豊志樹
On 2016年3月16日 at 14:25:25, Hideki EIRAKU (hdk @ igel.co.jp(mailto:hdk @ igel.co.jp)) wrote:
> フィールドストーン 八木様
>
> 榮樂です。こんにちは。
>
> From: 八木 豊志樹
> 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
>
BitVisor-devel メーリングリストの案内