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」のコマンドで再設定する。


   なお「スタートアップ修復」「システムの復元」では回復しません。


     以上