Welcome to MSDN Blogs Sign in | Join | Help

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

毎度 K里です。先月 Windows 7 開発チームブログで、Windows 7 Beta でも Windows Touch 機能が特定の PC で使えるようになったとお知らせがありました (詳細はこちら)。日本ではまだ 1 機種のみとなりますが、既に試されている方もいらっしゃるかと思います。私はまだ実際に試していませんが、面白そうなネタができたらお知らせしようと思います。

 

さてさて今回は前回に引き続き USB 2.0 カーネル デバッグの後編でございます。前回は、USB 2.0 カーネル デバッグについて、公開情報を基に基本的な設定手順をお知らせしました。今回は、公開情報にはない情報をまとめてみました。お役に立てれば幸いです。

 

USB デバッグ接続ができない原因と対処方法

前回にお知らせした手順でデバッグ接続ができない場合、BIOS 設定にて Legacy USB サポート機能の有無をご確認下さい。もし、Enable となっているようであれば、一度 Disable にし、再度デバッグ接続できるかお試し下さい。Legacy USB は、SMI (System Management Interrupts) によるハードウェア割込みを実装しています。SMI OS に対して透過なものであり、カーネル デバッグの通信に影響を与える可能性があります。これは、特に USB だけに限られた話ではなく、シリアル、1394 ケーブルを用いたカーネルデバッグでも同様のことが言えます。ただ、USB デバッグは、他のインターフェースよりもこの Legacy USB サポート機能によってデバッグ接続できない確率が高い傾向にあるようです。カーネル デバッグを行う場合、何れのケースにおいても、可能な限り Legacy USB サポート機能を無効にすることをお奨めします。

 

これまでに私たちが確認した限り、一部のチップセットでは動作が不安定 (接続できたりできなかったり) であったり、全く接続できないケースもありました。現段階では、全ての EHCI コントローラーに対して、必ずしも USB 2.0 デバッグができるわけではないことをご容赦下さいませ。その際にはシリアルや 1394 インターフェースでのデバッグをご検討頂けると幸いです。

 

EHCI コントローラーがカーネルデバッグをサポートしているかを確認する方法

Windbg を使用して、PCI Configuration Space から対象コントローラーの Capability を確認します。手順は以下のとおりです。

(1) ターゲット コンピューターに Debugging Tools for Windows をインストールします

(2) ローカル カーネル デバッグ用のエントリを作成します (*1)

(3) 再起動後、デバッグ モードで起動します

(4) ターゲット コンピューター上で Windbg を管理者権限で起動し、[File] -> [Kernel Debug] -> [Local] を指定します

*1 ローカル カーネル デバッグの設定について

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

>bcdedit /copy {current} /d DebugMode

>bcdedit /dbgsettings serial debugport:1 baudrate:115200

>bcdedit /debug {identifier} on

* デバッグ ポート設定は Default (シリアル) に設定しておきましょう。

Windbg から !pci コマンドを実行します。

lkd> !pci

PCI Segment 0 Bus 0

00:0  8086:2990.02  Cmd[0106:.mb..s]  Sts[2090:c....]  Intel Host Bridge  SubID:1028:01da

01:0  8086:2991.02  Cmd[0107:imb..s]  Sts[0010:c....]  Intel PCI-PCI Bridge 0->0x1-0x1

1a:0  8086:2834.02  Cmd[0005:i.b...]  Sts[0280:.....]  Intel USB Controller  SubID:1028:01da

1a:1  8086:2835.02  Cmd[0005:i.b...]  Sts[0280:.....]  Intel USB Controller  SubID:1028:01da

1a:7  8086:283a.02  Cmd[0106:.mb..s]  Sts[0290:c....]  Intel USB2 Controller  SubID:1028:01da

1c:0  8086:283f.02  Cmd[0106:.mb..s]  Sts[0010:c....]  Intel PCI-PCI Bridge 0->0x2-0x2

1c:4  8086:2847.02  Cmd[0106:.mb..s]  Sts[0010:c....]  Intel PCI-PCI Bridge 0->0x3-0x3

1d:0  8086:2830.02  Cmd[0005:i.b...]  Sts[0280:.....]  Intel USB Controller  SubID:1028:01da

1d:1  8086:2831.02  Cmd[0005:i.b...]  Sts[0280:.....]  Intel USB Controller  SubID:1028:01da

1d:2  8086:2832.02  Cmd[0005:i.b...]  Sts[0280:.....]  Intel USB Controller  SubID:1028:01da

1d:7  8086:2836.02  Cmd[0106:.mb..s]  Sts[0290:c....]  Intel USB2 Controller  SubID:1028:01da

1e:0  8086:244e.f2  Cmd[0107:imb..s]  Sts[0010:c....]  Intel PCI-PCI Bridge 0->0x4-0x4

1f:0  8086:2810.02  Cmd[0107:imb..s]  Sts[0210:c....]  Intel ISA Bridge

1f:2  8086:2820.02  Cmd[0005:i.b...]  Sts[02b0:c6...]  Intel IDE Controller  SubID:1028:01da

1f:3  8086:283e.02  Cmd[0103:im...s]  Sts[0280:.....]  Intel SMBus Controller  SubID:1028:01da

1f:5  8086:2825.02  Cmd[0005:i.b...]  Sts[02b0:c6...]  Intel IDE Controller  SubID:1028:01da

上記の場合だと、Bus:0 Device:1a Function:7 Bus:0 Device:1d Function:7 USB 2.0 コントローラーになります。

 

次に、!pci コマンドのオプションフラグを用いて、USB 2.0 コントローラーの情報を確認します。

lkd> !pci 100 0 1a 7

 

PCI Configuration Space (Segment:0000 Bus:00 Device:1a Function:07)

Common Header:

    00: VendorID       8086 Intel Corporation

    02: DeviceID       283a

    04: Command        0106 MemSpaceEn BusInitiate SERREn

    06: Status         0290 CapList FB2BCapable DEVSELTiming:1

    08: RevisionID     02

    09: ProgIF         20 USB2 Enhanced Interface

    0a: SubClass       03 USB2 Controller

    0b: BaseClass      0c Serial Bus Controller

    0c: CacheLineSize  0000

    0d: LatencyTimer   00

    0e: HeaderType     00

    0f: BIST           00

    10: BAR0           dffffc00

    14: BAR1           00000000

    18: BAR2           00000000

    1c: BAR3           00000000

    20: BAR4           00000000

    24: BAR5           00000000

    28: CBCISPtr       00000000

    2c: SubSysVenID    1028

    2e: SubSysID       01da

    30: ROMBAR         00000000

    34: CapPtr         50

    3c: IntLine        16

    3d: IntPin         03

    3e: MinGnt         00

    3f: MaxLat         00

Device Private:

    40: 00000000 00000000 00000000 00000000

    50: c9c25801 00000000 20a0000a 00000000

    60: 01ff2020 00000000 01000001 c0000000

    70: 03d70000 00000000 00000000 00000000

    80: 00000000 00000001 00000000 00000000

    90: 00000000 00000000 00000000 00000000

    a0: 00000000 00000000 00000000 00000000

    b0: 00000000 00000000 00000000 00000000

    c0: 00000000 00000000 00000000 00000000

    d0: 00000000 00ffaa00 00000000 00000000

    e0: 00000000 00000000 00000000 00000000

    f0: 00000000 00408588 00020f86 20029706

Capabilities:

    50: CapID          01 PwrMgmt Capability

    51: NextPtr        58

    52: PwrMgmtCap     c9c2 PMED0 PMED3Hot PMED3Cold Version=2

    54: PwrMgmtCtrl    0000 DataScale:0 DataSel:0 D0

 

    58: CapID          0a Debug Port Capability

    59: NextPtr        00

上記コマンドの 100 !pci コマンドにおけるオプションフラグで、指定された PCI デバイスの Configuration Space 情報を取得します。このため、上記コマンドは、Bus:0 Device:1a Function:7 USB2 Controller における PCI Configuration Space の情報を取得し、表示しています。対象コントローラーがカーネルデバッグ機能をサポートしているかは、Capabilities の欄を確認します (Capability のみの表示は、オプションフラグ 40 となります)上記 Capability には、58: CapID があります。EHCI Specification for USB より、CapID: 0A は、デバッグ ポートをサポートしていることを意味しています。

 

上記の例であげました環境では、デバッグポートをサポートする 2 つの EHCI コントローラーが搭載されていることになります。

lkd> !pci 40 0 1a 7

PCI Segment 0 Bus 0

1a:7  8086:283a.02  Cmd[0106:.mb..s]  Sts[0290:c....]  Intel USB2 Controller  SubID:1028:01da

      Cap[50] ID 01 PowerManagement

          PMC   c9c2 (PME from D3C3H0 v2)

                         WARNING PMC non-zero reserved fields 01c0

          PMCSR 0000 (PME_Status=0 PME_En=0 State=D0)

      Cap[58] ID 0a Debug Port

 

lkd> !pci 40 0 1d 7

PCI Segment 0 Bus 0

1d:7  8086:2836.02  Cmd[0106:.mb..s]  Sts[0290:c....]  Intel USB2 Controller  SubID:1028:01da

      Cap[50] ID 01 PowerManagement

          PMC   c9c2 (PME from D3C3H0 v2)

                         WARNING PMC non-zero reserved fields 01c0

          PMCSR 0000 (PME_Status=0 PME_En=0 State=D0)

      Cap[58] ID 0a Debug Port

 

ではまた。

Published Friday, March 13, 2009 7:49 PM by jpwdkblg
Filed under: ,

Comments

Anonymous comments are disabled
 
Page view tracker