USB 2.0 カーネル デバッグ 前編

こんにちは、K 里です。どうぞよろしくお願いします。

 

さて、今回は USB 2.0 カーネル デバッグについて紹介しようと思います。現在、カーネル デバッグの方法として、シリアルや 1394 インターフェースを用いてのデバッグが私たちの中では主流です。しかし、最近これらのインターフェースが搭載されない機器が出てきました。なので、おなじみ USB 2.0 インターフェースを使用してのデバッグ方法を 2 回に分けて説明しようと思います。皆様のお役に立てれば幸いです。

 

まずは、以下のモノをご用意くださいませ。

 

- USB 2.0 デバッグ ケーブル

USB2 Debug Device Functional Specification の要件を満たすケーブルであること。私たちは、PLX Technology 社製 NET20DC を使ってます。

- ホスト コンピューター

EHCI コントローラーを搭載していること。サポートされた OS は、Windows 2000 以降。

- ターゲット コンピューター

EHCI コントローラーを搭載し、且つデバッグ ポートが外部的にアクセス可能であること。サポートされた OS は、Windows Vista 以降。

- デバッガー

Debugging Tools for Windows (Windbg) は、最新版をご使用ください。

 

それでは、設定手順について説明していきます。

 

1. デバイスドライバのインストール

(1) ホスト マシンに Windbg をインストールします。

(2) ホスト マシンとターゲット マシンを USB 2.0 ケーブルで接続します。

(3) ホスト マシンに USB 2.0 Debug Connection Driver (usb2dbg.sys) をインストールします。(*1)

*1 usb2dbg.sys は、"Debugging Tools for Windows" 以下の usb フォルダ内にあります。

 

2. ターゲットマシンのデバッグ設定

bcdedit.exe を使用して以下のように設定します。

(1) デバッグ接続用のエントリを作成します。

    bcdedit /copy {current} /d DebugMode

(2) デバッグ タイプを USB に設定し、ターゲット名を指定します。

    bcdedit /dbgsettings usb targetname:myVistaTarget

(3) 使用する EHCI コントローラーを指定します。

    bcdedit /set {identifier} loadoptions busparams=x.y.z (*1)(*2)

(4) 対象エントリのデバッグモードを有効にします。

    bcdedit /debug {identifier} on

*1 ターゲット コンピューターに搭載される EHCI コントローラーが複数ある場合に指定します。

*2 EHCI コントローラーの指定方法について

デバイス マネージャーより、デバッグに使用する EHCI コントローラーをダブルクリックします。下記の PCI バス 0, デバイス 29, 機能 7 より busparams=0.1d.7 となります。(<bus>.<device>.<function> は、それぞれ 16進数での指定が必要です) busparams による指定は、1394 デバッグ接続の場合でも同様に設定します。

ehci

例えばこんな感じ。

/********************************/

/*** 設定前のブート構成データ ***/

/********************************/

C:\Windows\system32>bcdedit

 

Windows ブート マネージャ

--------------------------------

identifier {bootmgr}

device partition=C:

description Windows Boot Manager

locale ja-JP

inherit {globalsettings}

default {default}

resumeobject {default}

displayorder {current}

toolsdisplayorder {memdiag}

timeout 30

 

Windows ブート ローダー

--------------------------------

identifier {current}

device partition=C:

path \Windows\system32\winload.exe

description Microsoft Windows Vista

locale ja-JP

inherit {bootloadersettings}

osdevice partition=C:

systemroot \Windows

resumeobject {default}

nx OptIn

 

/********************************/

/*** デバッグ用エントリの設定 ***/

/********************************/

C:\Windows\system32>bcdedit /copy {current} /d DebugMode

エントリは {bf406aaa-9c00-11dc-9fd4-001aa0c59b79} に正常にコピーされました。

 

C:\Windows\system32>bcdedit /dbgsettings usb targetname:myVistaTarget

この操作を正しく終了しました。

 

C:\Windows\system32>bcdedit /set {bf406aaa-9c00-11dc-9fd4-001aa0c59b79} loadoptions busparams=0.1d.7

この操作を正しく終了しました。

 

C:\Windows\system32>bcdedit /debug {bf406aaa-9c00-11dc-9fd4-001aa0c59b79} on

この操作を正しく終了しました。

 

/********************************/

/*** 設定後のブート構成データ ***/

/********************************/

C:\Windows\system32>bcdedit

 

Windows ブート マネージャ

--------------------------------

identifier {bootmgr}

device partition=C:

description Windows Boot Manager

locale ja-JP

inherit {globalsettings}

default {default}

resumeobject {default}

displayorder {current}

                        {bf406aaa-9c00-11dc-9fd4-001aa0c59b79}

toolsdisplayorder {memdiag}

timeout 30

 

Windows ブート ローダー

--------------------------------

identifier {current}

device partition=C:

path \Windows\system32\winload.exe

description Microsoft Windows Vista

locale ja-JP

inherit {bootloadersettings}

osdevice partition=C:

systemroot \Windows

resumeobject {default}

nx OptIn

Windows ブート ローダー

--------------------------------

identifier {bf406aaa-9c00-11dc-9fd4-001aa0c59b79}

device partition=C:

path \Windows\system32\winload.exe

description DebugMode

locale ja-JP

loadoptions busparams=0.1d.7

inherit {bootloadersettings}

osdevice partition=C:

systemroot \Windows

resumeobject {default}

nx OptIn

debug Yes

 

C:\Windows\system32>bcdedit /dbgsettings

targetname myVistaTarget

debugtype USB

3. 接続確認

  (1) ホスト コンピューターとターゲット コンピューターを USB2.0 ケーブルで接続します。(*1)

  (2) ターゲット コンピューターをデバッグ モードで起動します。

  (3) ホスト コンピューター上で、Windbg を起動し、[File] -> [Kernel Debug] で USB2.0 を指定します。

*1 ターゲット コンピューター側では、EHCI コントローラーのデバッグ ポートに接続します。Intel EHCI コントローラーにおける規定の設定では、PORT1 がデバッグポートとして設定されています。ポート番号については、"Debugging Tools for Windows" 以下の usbview.exe にて確認できます。

usbview

いかがでしたでしょうか。

それでは次回もお楽しみにー。

 

Appendix

Setting Up a USB 2.0 Debug Cable Connection

https://msdn.microsoft.com/en-us/library/cc266326.aspx

Boot Parameters to Enable Debugging

https://msdn.microsoft.com/en-us/library/ms791527.aspx

BCD Boot Options Reference

https://msdn.microsoft.com/en-us/library/aa906217.aspx

USB に関する FAQ: 中級レベル

https://www.microsoft.com/japan/whdc/connect/usb/USBFAQ_intermed.mspx