2009/01/17(01版)
WinDbg−USB2.0接続
(USB接続のカーネルデバッガ)
(COM接続のカーネルデバッガ)
WinDbgは次のようにメモリダンプ解析とカーネルデバッガとして活用が できる。ここではUSB接続とCOM接続のカーネルデバッガについて記述する。 WinDbg →┬→ メモリダンプ解析(ワトソンダンプ解析を含む) ├→ アプリケーション解析 (1台構成) └→ カーネルデバッガ ├→ USB接続 (2台構成)★ここを記述 ├→ COM接続 (2台構成)★ここを記述 ├→ 1394接続 (2台構成) └→ Local接続 (1台構成)デバッグするTARGETでの「Windowsブートマネージャ」の「開始するオペレーティングシステムを選択する」画面は次のように指定する場合です。(OSはVista以降)
Microsoft Windows Vista
デバッガ(USB) [デバッガ有効]
デバッガ(COM1:115200) [デバッガ有効]
USB接続のカーネルデバッガ
1.「USB接続のWinDbg」の構成┌────────┐ ┌────┐ USB2.0┌────────┐ │ HOST │ ┌┤NET20DC ├──-[1]┤ TARGET │ │Win2000/XP/Vista│ │└────┘ [2]┤Windows Vista │ │WinDbgを走らせる├──┘ [3]┤ブートを変更 │ │こちらから操作 │USB2.0 [4]┤こちらをデバッグ│ └────────┘/USB1.0 └────────┘ 2.「NET20DC」の入手 日本では販売せず個人輸入となる。(購買部門に事前確認) 販社 :Semiconductor (手配から約1週間で入手) 製品 :NET20DC($83) 送料・税関含む(約$55) http://www.semiconductorstore.com/cart/pc/viewPrd.asp?idproduct=12083 3.TARGETの設定 (1)TARGETのOSはVista以降が対象です。 (2)UAC(ユーザー・アカウント制御)を無効にし設定変更可にする。 ログインするユーザで設定する。 http://www.atmarkit.co.jp/fwin2k/win2ktips/859disuac/disuac.html(3)「デバッガ(USB)」を「Windowsブートマネージャ」に追加する場合 ●ブートデータの退避と確認 Vistaでは「boot.ini」が無く、コマンドで設定する。 TARGETのコマンドプロンプト(DOSウインドウ)を開く。 「bcdedit /enum」コマンドで現状のブートの設定を確認し、 復旧対応としてテキストベースで必ず記録に残す。 この時、コピーのため参考とする「Windows ブート ローダー」の 「identifier」は{ID}が「{current}」であることを確認する。「{current}」は現在の立ち上がったブートローダーを示す。 「{default}」はブート選択でのタイムアウトをした場合に自動 選択される指定のブートローダーを示す。 ●ブート ローダーに「デバッガ(USB)」の1本を追加する。 {ID}が「{current}」の場合、「デバッガ(USB)」を新たに作成する ため次ぎの1本のコマンドでブートローダーをコピーをする。 bcdedit /copy {current} /d "デバッガ(USB)" 「bcdedit /enum」コマンドで追加状態を確認。(下記参照) 「identifier」で{ID}を確認する。{ID}はそのつど変化する。 identifier {3c56c694-cce2-11dd-b3f4-000000000000} description デバッガ(USB) ●「デバッガ(USB)」でUSB2.0接続のカーネルデバッガを有効にする。 上記の場合は {ID(USB)} = {3c56c694-cce2-11dd-b3f4-000000000000} とする。そのつど変化する。 コマンドプロンプトで次の3本のコマンドを1本ごと実行。 bcdedit /set {ID(USB)} targetname u2 bcdedit /set {ID(USB)} debugtype USB bcdedit /set {ID(USB)} debug Yes 「bcdedit /enum」コマンドで設定状態を確認。(下記参照) identifier {3c56c694-cce2-11dd-b3f4-000000000000} description デバッガ(USB) targetname u2 debugtype USB debug Yes (4)USB2.0制御のチップが2個以上ある場合(1個は設定不要) TARGETのEHCI コントローラー(USB2)が2個以上有る場合はデバイス マネージャーでEHCIの接続場所を確認する。 WinDbgの「!PCI」コマンドでも確認できます。 「PCIバス 0, デバイス 29, 機能 7」(29=1Dh)(和文) 「PCI bus 0, device 29, function 7」 (英文) この時は次のように選択し、EHCIの1個を指定する。 bcdedit /set {ID(USB)} loadoptions busparams=0.1D.7 (5)「NET20DC」接続 TARGETを再起動しUSBマウスを全てのUSBポートに接続する。 カーソルの移動しないUSBポートに「NET20DC」を接続する。 TARGETで「NET20DC」のUSBドライバ インストール指定は無し。 EHCIの1番目のUSBポートのみに接続可能です。変更できず。 4.HOSTにWinDbgをインストール (1)Windows XP以降のOS , インターネットにLAN接続可能なPCを準備。 (2)マイクロソフトWeb http://www.microsoft.com/japan/whdc/DevTools/Debugging/default.mspx 「Debugging Tools for Windows 32 ビット バージョンのインストール」 をダウンロードする。 (3)「C:\WinDbg」のフォルダを新規に作成する。( D: E: F: でも可能) この領域は 160MB 前後を使用します。 (4)「C:\WinDbg」にダウンロードしたソフトをインストール。 (5)「NET20DC」を任意のUSBポートに接続する。 「NET20DC」のUSBドライバが要求された時に「C:\WinDbg\usb」の 場所を指定する。 HOST側とTARGET側のドライバは「NET20DC」メーカから提供されず、 全てマイクロソフトから提供される。 5.USB接続のWinDbgを起動する (1)上記1項の図のように「NET20DC」を接続する。 (2)TARGETは「デバッガ」モードで立ち上げる。 (3)HOSTはLAN接続されておりマイクロソフトに接続できる事。 WinDbgを起動し、「Symbol File Path」は SRV*C:\WinDbg\websymbols*http://msdl.microsoft.com/download/symbols などの様に適切に指定されている事。 なお、「C:\WinDbg\websymbols」は空フォルダで任意に指定できる。 (4)「WinDbg」→「File」→「Kernel Debug」→「USB 2.0」 →Target nameは「u2」(上記3.(3)項でu2と指定)→「OK」 →Toolbarの「Break」ボタンを押す。(初回は約20秒で応答) (5)「.reload」「!thread」コマンドなど、カーネルデッガの基本動作 を確認する。 6.注意事項 (1)TARGET側はUSB-HUB経由で「NET20DC」を接続できない。 (2)USB2.0の[2][3][4]ポートに「NET20DC」を接続できない。 (3)USB2.0の[1]ポートに「NET20DC」を直接接続のみ動作可能。 ┌──┐ ┌────┐ USB2.0┌TARGET┐ │HOST├─「NET20DC 」─┤USB-HUB ├─-[1]─┤ │ │ │ 接続できない └────┘ [2]─┤ │ │ │ [3]─┤ EHCI │ │ ├─「NET20DC 」────────-[4]─┤ │ └──┘ 接続できない └───┘
COM接続のカーネルデバッガ
7.COM接続のカーネルデバッガを接続する。 (1)TARGETのOSはVista以降が対象です。接続形態は下記。 ┌────────┐ ┌────────┐ │ HOST │ 115200bps │ TARGET │ │Win2000/XP/Vista│ クロスケーブル │Windows Vista │ │WinDbgを走らせる├───────────┤ブートを変更 │ │こちらから操作 │COM COM1│こちらをデバッグ│ └────────┘ └────────┘ (2)「デバッガ(COM1:115200)」をブート ローダーに追加 ●ブートデータの退避と確認 TARGETのコマンドプロンプト(DOSウインドウ)を開く。 「bcdedit /enum」コマンドで現状のブートの設定を確認。 コピーする元となる{ID}を確認する。この{ID}は「{current}」 又は「{default}」であることが多い。 ●ブート ローダーに「デバッガ(COM1:115200)」の1本を追加する。 コピー元が「{default}」であった場合は次ぎの1本のコマンドで コピーをする。 bcdedit /copy {default} /d "デバッガ(COM1:115200)" 「bcdedit /enum」コマンドで追加状態を確認。(下記参照) 「identifier」で{ID}を確認する。{ID}はそのつど変化する。 identifier {ac42a049-0a68-11dc-87d1-000000000002} description デバッガ(COM1:115200) ●「デバッガ(COM1:115200)」でCOM接続のカーネルデバッガを有効にする。 上記の場合は {ID(COM)} = {ac42a049-0a68-11dc-87d1-000000000002} とする。そのつど変化する。 コマンドプロンプトで次の3本のコマンドを1本ごと実行。 bcdedit /set {ID(COM)} debugtype serial bcdedit /set {ID(COM)} baudrate 115200 bcdedit /set {ID(COM)} debugport 1 bcdedit /set {ID(COM)} debug Yes 「bcdedit /enum」コマンドで設定状態を確認。(下記参照) identifier {ac42a049-0a68-11dc-87d1-000000000002} description デバッガ(COM1:115200) debugtype Serial debugport 1 baudrate 115200 debug Yes
その他の関連事項
8.その他の関連事項 ●「Windowsブートマネージャ」のタイムアウトの時間を4秒と指定 する。 bcdedit /set {bootmgr} timeout 4 ●「Windowsブートマネージャ」でタイムアウトをした場合に 「デバッガ(USB)」を自動選択させたい時は次のように指定する。 bcdedit /set {bootmgr} default {ID(USB)} ●「Windowsブートマネージャ」のエントリから「デバッガ(USB)」を 削除する時。 bcdedit /delete {ID(USB)} ●「Windowsブートマネージャ」の選択画面で「デバッガ(USB)」を 先頭に並び変える場合。(3本の{ID}の場合) bcdedit /displayorder {ID(USB)} {ID(01)} {ID(02)} ●ブートを変更すると再立ち上げが出来なくなることがあります。 その時は、次のように回復させる。 「VistaのCD-ROMでIPL」 →「コンピュータを復旧(R)」 →「オペレーティング システム」を選択 →「コマンド プロンプト」 上記3.(3)項の「bcdedit」のコマンドで再設定する。 なお「スタートアップ修復」「システムの復元」では回復しません。 以上