最近、WindowsのKernel Debugが出来るように準備を進めていました。古い人の話だと、カーネルデバッグはシリアル接続で!という話みたいですが、今やその接続方法も色々と選べるようで、しばらくこの接続方法について記事を書いておきたいと思います。
なお、自分は最近始めたばかりのにわかです。Kernel Debugging で出来ることはこれから学んでいこうと思っています。
さて、Windows8 になってさらにカーネルデバッグの接続方法は増えました。
特に、ネットワーク経由によるもの、USB 3.0 経由によるものの2つが増えました。
USBは 2.0 なら従来からサポートされていたようですが、特殊な機器が必要となっていたようです。
またこれが日本では販売しておらず、輸入の形で入手するしかなかったそうです。
他の方法では、COMによるシリアル接続、IEEE1394による接続、とあるようです。
ただ最近は両者のインターフェースを備えるマザーボードも減ってきているし、将来を考えるとこの方法は未来が無いなと思います。
Microsoftが Windows8 で出来るようにしてきた2つの方法はしばらくはメインの方法として生き残っていくのではと期待しています。
Windows8 をインストールして、デバイスマネージャーを見てみると実は、Microsoft Kernel Debug Network Adapter というものが存在しています。
これがまさにカーネルデバッグ時に使えるアダプタとなります。
環境
ホスト
開発者が操作するPC側をホストと呼びます。こちらは Windows7 を想定して、VisualStudio 2012 がインストールされているとします。
WDKがインストールされているか、WinDbgが使用可能状態になっていることも条件です。
ターゲット
デバッグされる側のPCのことをここではターゲットと呼びます。Windows8 がインストールされているものとします。
ネットワーク経由のカーネルデバッグの設定
LANでのカーネルデバッグを説明します。
ターゲットの(管理者の)コマンドラインでbcdeditを起動して、設定するだけで終了です。簡単です。
c:\>bcdedit /dbgsettings net hostip:ww.xx.yy.zz port:PortNo Key=********************************** c:\>bcdedit /debug on
上記のコマンドを実行の際に、ネットワークのキー情報が出力されます。これをメモしておく必要があります。
hostipにはホストPCのIPアドレスを記入し、PortNo の部分にはポート番号(50000以降の値にしておく)を指定しておきます。
この設定は次回の起動から有効になります。
ただこの設定が有効化されると対象となる物理的なネットワークアダプタは見えなくなる点に注意が必要です。
普段の通信には、Microsoft Kernel Debug Network Adapter が有効化された別アダプタが見えてくることになります。
こちらにIPをきちんと割り当てておけば、Windowsのファイル共有も使えますし、問題にはならないでしょう。
問題になるとすれば、実は対応するネットワークアダプタには制限がある、ということです。
こちらのほう(対応リスト)に対応しているチップセットが書いてあります。
とりあえず最近のマザーボードにのっていることの多い Realtek製が含まれている点で問題にはなりにくそうです。またIntelの入手しやすいチップも対応しているようなのでこれも問題ないでしょう。
RTL8168, RTL8169, RTL8136, ICH8からICH10とか、Intel Gigabit CT desktop adapterとか使える点がいいですね。
ホスト側では WinDbg を起動して、ターゲットの接続待ち状態にしておきます。
NETタブを開いて、先ほどメモしたKeyを入力し、ポート番号をあわせておきます。
問題なければ、接続が確立されWindowsの起動とともに情報が出てくると思います。
VisualStudio2012と現在のWDKは統合されて便利になったようで、わざわざWinDbgを起動しなくても Visual Studio からカーネルデバッグもできるようになっているようです。
この場合には、”プロセスにアタッチ” を選び、トランスポートに Windows Kernel Mode Debuggerを選びます。
そして、検索ボタンを押して出てくるダイアログで、Add New Computer を選択します。
ターゲットの設定は既に終わっているので、その後の画面ではManually Configure … を選んでおきます。
その後の設定画面では、下記の画面のようになるので、キー&ポート情報を入力します。
ここでのHost IPはこのVisual Studioを起動しているPCのアドレスとなるため間違えないようにします。
まとめ
特殊な機器を不要としてのカーネルデバッグが出来るようになってきたのは、これから始める自分みたいな人にとっていいことだと思います。
さらにはネットワーク経由なので、ちょっと物理的に機器同士が離れていても問題なくなったのがすばらしい。
ちょっと手元の機器で試してみて、今のところどれでも動いているようなので相性とか問題はないのかもと思います。
今回説明しなかった USB 3.0 についても近いうちに記事にしたいと思います。
日本語ではなかなか記事がないため苦労しましたが、ネタとしてはなかなかおもしろいためご期待下さい。
今回の設定方法元
Microsoftのページ: Setting Up Kernel-Mode Debugging over Network Cable Manually