[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 メーリングリストの案内