本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

Windows8時代のKernel Debugging USB 3.0編

前回はネットワーク経由によるWindows Kernel Debugの接続方法を説明しました。今回は USB 3.0によるカーネルデバッグの設定方法となります。

環境

ホスト
Windows7 もしくは Windows8 がインストールされており、WinDbgが起動可能なように準備されていること。
VisualStudio 2012 + WDK の環境もOK

※ 後述しますが、Windows8のほうが問題がないので、望ましいです。Win7でも概ね問題なく使えるのですが。

ターゲット
Windows8がインストールされたPC。

共通
試す内容から当然ですが、両者 USB 3.0のポートを備えており、ドライバのインストールが完了していること。
自分の実験環境では、ターゲットにはそもそも USB 3.0 をマザーボードに持っていなかったため、玄人志向の USB 3.0 拡張ボードをさして本実験を行っております。

USB 3.0経由のカーネルデバッグの設定

USB 3.0でのカーネルデバッグ設定方法を説明していきます。
ターゲットの(管理者の)コマンドラインでbcdeditを起動して、設定するだけで終了です。簡単です。

c:\>bcdedit /dbgsettings usb targetName:usb3
c:\>bcdedit /debug on

targetName:以降の名前については、任意の物が使用可能です。設定したら再起動を行います。
このときに ホストとターゲットをUSB 3.0のケーブルで接続しておきます。

続いてホスト側の設定です。
WinDbgなら起動して、メニューから、 File / Kernel Debug を選択し、USBタブを開いて、TargetNameの部分に、先ほど指定した usb3 を入力して待ち受けるだけです。

接続されると以下のようにログが出てきます。(ここからスクリーンショットはWindows8のホストに切り替えてます。ターゲットのWin8ではない点に注意)

ターゲットを再起動してもこの通り(注意点参照)。

うまく動いているようです。

気になる点は、このようにうまく動いているのにもかかわらず、Debuggee not connected と出ているタイミングがあることや、
デバイスマネージャー上で USB 2.0 のデバッグデバイスだ と主張している点です。そう見えているのだろうか…。

注意点

たまにUSB3.0のチップが複数搭載されているケースがあります。この場合、自分が試した範囲では Intelチップ側のほうが正常に動くようです。また拡張ボードで使用しているチップは、Renesas の μPD720202 チップでした。

また、Windows7をホストとして使用している場合、現時点までにわかっている妙な不具合として、以下の点があります。

  • ホストでデバッグ接続したまま、ターゲットを再起動すると次回起動時にパケット送受信エラーのようになる
  • この場合、ホストの方も再起動するまで使用不可能になる
  • ターゲットを再起動する際には、ホストのほうのデバッグ接続を一度切っておけば、問題はなさそうに見える

Windows8だとターゲットを再起動しても問題なく再コネクション行って以下のようにログが出てきます。

まとめ

Windows8ではUSB 3.0によるカーネルデバッグ接続も受け入れてくれるので、選択肢が広がりました。
今のところ Networkと並んで有力候補となるのではないかと考えています。
上記で何気なく説明しているケーブルが実はくせ者だったりするので、これについて次回以降ちょっと記事にしたいと思います。

設定の情報元
マイクロソフトのSetting Up Kernel-Mode Debugging over a USB 3.0 Cable Manually

プログラミング
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました