Windows10 アニバーサリーアップデート (1607) が一段落したので、この環境に対してカーネルデバッグができるかをテストしてみました。
以前にも USB 3.0 でカーネルデバッグのやり方についてはご紹介しました。
今回の内容その情報のアップデートとなります。以前には判明しなかった注意点を列挙したり使えるボードについて紹介を入れてあります。
環境について
今回は以下の環境で実験しています。
・デバッガが動くホスト側
Windows10 Pro(x64) 都合により 1511 を使用。
デバッガ(WinDBG)を導入済み
・デバッグ対象であるターゲット側
Windows10 Pro(x64) 1607 を使用。
古い機械のため USB 3.0 を持たない機器のため、PCI-Express で増設しました(大事)
検証
両方の機器を USB 3.0 デバッグケーブルで接続します。
このデバッグケーブルは入手性が問題なので、以前にも紹介したように自作してしまうのも1つの手です。
設定の詳しい手順については以前のものと変わらないため、昔の記事を参考にしてください。ここでは最低限の操作だけ記載しておきます。
ターゲットで以下のようにして有効化します.
c:\>bcdedit /dbgsettings usb targetName:usb3 c:\>bcdedit /debug on
ホスト側では WinDBG を起動して、デバッグ接続を待ち受けておきます。
最初の起動では
“Failed to copy USB device driver inf. The debugger must be run elevated for the first use of this transport. Error 0x5.”
と表示されてしまいます。
このときには記述の通り、 WinDBG を管理者権限付きで起動して、USB によるカーネルデバッグの待ち受けの設定を行います。
これは初回のみ必要で、2度目以降は管理者権限は不要となります。
設定できたらターゲット側を再起動します。接続が確立できた段階でホスト側のデバイスマネージャにデバッグ用のデバイスが出現します。従来は USB 2.0 というキーワードがありましたが、今回は消えて “USB Debug Connection Device” となっていました。
うまくいけば以下のようにホスト側の WinDBG がログを出力していきます。
うまく動作するとこのようにカーネルデバッグの手段として使用可能です。
注意点
USB 3.0 経由によるカーネルデバッグについては、注意すべきポイントがたくさんあります。
- ホスト環境の問題
- ケーブルの問題
- ターゲットデバイスのUSB 3.0 チップ問題
これらを順番に見ていきます。
ホスト環境の問題
USB 3.0 を備えるホストにおいても以下のように表示されてうまくいかないことがあります。
あるいはここまで進行せずに、 USB: Write opened のままで進行しないこともありました。
ホストに複数の USB 3.0 ポートやコントローラがある場合には、接続する先を変えて試してみるのも1つの手です。
これは USB コントローラを変えてみて挙動が変わった事例ですが、
自分の環境では “USB: Write opened” が表示されて進行停止してしまうポートもあれば、上記のように Retry まで進むポートもありました。
そのときのコントローラは, ASMedia の USB コントローラと、Z77チップセットのものでした。Broadwell 世代のCPUを搭載する PC で試してみたところ正常に動作しました。
明らかにホスト側の USB コントローラーに左右されるようで、内蔵のものを使う場合は新しいものを使った方が良さそうです。
ケーブルの問題
どうにもノイズに負けてしまって信号が届かないケースもあるようです。
自作ケーブルの場合はなおさらです。
ケーブルの長さを短くするとか、ケーブルをアルミ箔で巻いてシールドしてみるとかの方法が考えられます。
ただし、正しく動く環境が存在しているときにケーブルを変えてみて発覚したりするので、この問題は一番発見しにくいものでもあります。
ターゲットのUSB 3.0 チップ問題
USB 3.0 を用いてのカーネルデバッグにおいて一番大事なポイントです。
USB 3.0 コントローラを備える全ての環境でカーネルデバッグとして使えるわけではありません。
確認方法ですが、 USBView を用いて確認する方法があります。
以下のように Is Port Debug Capable が YES となっていない場合にはまず使用不可能です。
YES となっていても前述の点で失敗してしまうケースもあります。
まとめ
やはり USB 3.0 経由でのカーネルデバッグは躓くポイントが多いといえます。
もしスムーズに1発で動いた場合には幸運といえると思います。
最後にうまくいくと思われる製品を紹介しておきます。
自分が使っているものはこちらになります。外れの製品もあるようですが、うまくいけば安定して使えていると思っています。
[amazonjs asin=”B0090B6JBO” locale=”JP” title=”玄人志向 USB3.0増設ボード PCI-Express x1 (Gen.2) 用 外部2ポート Renesas製チップ搭載 USB3.0RD-PCIE”]
上記の製品が Renesas μPD720202 を採用しています。
μPD720201, μPD720202 を採用している製品が今のところうまく動く可能性が高い印象です。
[amazonjs asin=”B00B7WIAFC” locale=”JP” title=”玄人志向 USB3.0増設ボード PCI-Express x1 (Gen.2) 用 外部2ポート+内部19ピン Renesas製チップ搭載 ロープロファイル対応 USB3.0R-P2H2-PCIE”]
[amazonjs asin=”B005RUDOH4″ locale=”JP” title=”BUFFALO PCI Express x1 用 USB3.0増設インターフェースボード 4端子搭載 IFC-PCIE4U3S”]
他にも VIA Labs や Fresco Logic といったところのチップも動作するものがあるという情報がありましたが、日本においてはは NEC/Renesas の上記のチップを採用したものが入手しやすいですね。
参考など
昔の記事へのリンクを張っておきます。