Freigeben über


Debuggen von USB-Geräteproblemen mithilfe von ETW-Ereignissen

Dieses Thema enthält Tipps zum Debuggen von USB-Geräteproblemen mithilfe von ETW-Ereignissen.

Diagnostizieren von Geräteaufzählungsfehlern

Sie können die ETW-Ereignisse verwenden, die dem Task USB-Hubaufzählung zugeordnet sind, um die Grundursache der meisten Geräteaufzählungsfehler zu ermitteln.

So zeigen Sie die Ereignisse in einem Ablaufverfolgungsprotokoll an, die dem TASK "USB-Hubaufzählung" zugeordnet sind

  1. Öffnen Sie Netmon, und suchen Sie ein Enumerationsereignis, z. B. "Start Enumeration of Port". Klicken Sie im Bereich Framezusammenfassung auf das Ereignis.

  2. Vergewissern Sie sich, dass es sich bei der Aufgabe für dieses Ereignis um eine USB-Hubaufzählung handelt, indem Sie das Feld Task für das Ereignis untersuchen:

    1. Erweitern Sie im Bereich Framedetails das Net-Ereignis, den Header, den Deskriptor, und suchen Sie dann nach dem Feld Task .
    2. Vergewissern Sie sich, dass das Feld Task den Wert 2 (USB-Hubaufzählung) enthält.
  3. Filtern Sie die Ereignisse so, dass nur diejenigen vom Hubtreiber angezeigt werden, die den Aufgabenwert 2 aufweisen:

    1. Klicken Sie mit der rechten Maustaste auf das Feld Vorgang .

    2. Wählen Sie Ausgewählten Wert hinzufügen zum Anzeigefilter aus.

    3. Klicken Sie im Bereich Framezusammenfassung mit der rechten Maustaste auf das Ereignis, und wählen Sie zum Anzeigefilter "Protokollname" hinzufügen aus.

    4. Ändern Sie im Bereich Filter anzeigen "OR" in "AND". Das folgende Beispiel zeigt den resultierenden Filter:

      NetEvent.Header.Descriptor.Task == 0x2 AND ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB"
      

      Weitere Informationen zur Verwendung von Filtern in Netmon finden Sie unter "USB Netmon-Filter" in der Fallstudie: Problembehandlung für ein unbekanntes USB-Gerät mithilfe von ETW und Netmon.

Diagnose von Gerätestartfehlern

Wenn ein Gerät während der Behandlung des Start-E/A-Anforderungspakets (IRP) des Geräts durch den Hubtreiber nicht gestartet werden kann, können Sie die ETW-Ereignisse verwenden, die der Usb-Gerätestartaufgabe zugeordnet sind, um den Fehler zu beheben. Suchen Sie in Netmon nach einem Gerätestartereignis wie "USB Device Start IRP Dispatched". Sie können die Ereignisse filtern, um nur diese vom Hubtreiber mit dem Aufgabenwert 21 (USB-Gerätestart) anzuzeigen. Weitere Informationen zum Erstellen eines solchen Filters finden Sie unter Diagnose von Geräteaufzählungsfehlern in diesem Thema.

Zeitpunkt des Einfügezeitpunkts für Profilerstellungsgeräte

Sie können bestimmen, wo während der Geräteeinfügung Zeit im Hubtreiber verbracht wird, indem Sie sich die Zeitstempel der Enumerationsereignisse ansehen.

Enumerationszeitpunkt

Der Teil der Einfügezeit des Geräts, den der Hubtreiber zum Aufzählen eines Geräts verbraucht hat, ist die Zeit, die zwischen den folgenden beiden Ereignissen verstrichen ist:

  • Startaufzählung von Port
  • Enumeration des abgeschlossenen Ports

Aufgaben für Profilerstellungsaufzählungen

Wenn der USB-Hubtreiber ein Gerät aufzählt, protokolliert er die folgenden Ereignisse in der folgenden Reihenfolge:

  • Startaufzählung von Port
  • Enumeration Debounce abgeschlossen
  • PDO erstellt für Enumeration
  • Portzurücksetzung der ersten Enumeration abgeschlossen
  • Enumeration : CreateDevice Complete
  • Zweite Enumeration Portzurücksetzung abgeschlossen
  • Enumeration : InitializeDevice Complete
  • Enumeration – SetupDevice Complete
  • Enumeration des abgeschlossenen Ports

Um die Zeit zu bestimmen, die der Hubtreiber für jeden Enumerationstask verbraucht, berechnen Sie die Zeit, die zwischen den vorherigen Ereignissen verstrichen ist. Verstrichene Zeit zwischen IoInvalidateDeviceRelations und IRP_MN_QUERY_DEVICE_RELATIONS

Um den Teil der Einfügezeit zu bestimmen, den das System verbraucht hat, während es auf die Abfragegerätebeziehungen wartete, messen Sie die verstrichene Zeit zwischen den folgenden beiden Ereignissen:

  • Enumeration des abgeschlossenen Ports
  • USB Hub Query Device Relations (BusRelations) IRP Dispatched

Verstrichene Zeit zwischen Abschluss der IRP_MN_QUERY_DEVICE_RELATIONS und IRP_MN_START_DEVICE

Um den Teil der Einfügezeit zwischen der Meldung des neuen physischen Geräteobjekts (PDO) an den Plug & Play-Manager und dem Empfang des Start-IRP zu bestimmen, messen Sie die verstrichene Zeit zwischen den folgenden beiden Ereignissen:

  • USB Hub Query Device Relations IRP abgeschlossen
  • USB Device Start IRP Dispatched

IRP-Zeitsteuerung starten

Messen Sie die verstrichene Zeit zwischen den folgenden beiden Ereignissen, um die Zeit zu bestimmen, die der Hubtreiber für die Behandlung des Start-IRP verwendet:

  • USB Device Start IRP Dispatched
  • USB Device Start IRP Abgeschlossen

Software-Initiated Gerätedauer

Der Funktionstreiber eines Geräts kann eine D0-Gerätestromanforderung senden, um das Gerät aus dem Angehalten-Zustand fortzusetzen. Um die erforderliche Zeit für das Anhalten des Geräts und die Bereitschaft für Übertragungsanforderungen zu bestimmen, messen Sie die verstrichene Zeit zwischen den folgenden beiden Ereignissen:

  • USB Device Set D0 Device Power IRP Dispatched
  • USB Device Set D0 Device Power IRP Abgeschlossen

Hardware-Initiated Gerätedauer

Ein Fortsetzensignal auf dem Bus bewirkt, dass ein Gerät aus dem angehaltenen Zustand fortgesetzt wird. Um zu bestimmen, wie lange das Gerät in einen Zustand fortgesetzt werden muss, in dem es für Übertragungsanforderungen bereit ist, messen Sie die verstrichene Zeit zwischen den folgenden beiden Ereignissen:

  • Der übergeordnete Hub wird nicht angehalten:
    • USB Device Wait Wake IRP abgeschlossen
    • USB Device Set D0 Device Power IRP Abgeschlossen
  • Der übergeordnete Hub wird angehalten:
    • Start der Fortsetzung des Hubs über selektives Anhalten (erstes dieser Ereignisse für einen Hub zwischen dem Gerät und dem Hostcontroller)
    • USB Device Set D0 Device Power IRP Abgeschlossen

HUB RESUME FROM Selective Suspend Timing

Sie können die erforderliche Zeit für die Fortsetzung eines Hubs aus dem selektiven Anhalten bestimmen, indem Sie die verstrichene Zeit zwischen den folgenden beiden Ereignissen messen:

  • Start der Fortsetzung des Hubs aus selektiver Ansetzung
  • Lebenslauf des Abgeschlossenen Hubs

Hinweis

Das Timing des Hub-Fortsetzens hängt vom Fortsetzen des Timings aller Geräte unterhalb des Hubs und möglicherweise von einigen oder allen Hubs oberhalb des Hubs ab, der fortgesetzt wird.