Wie funktioniert die Erkennung von USB-Geräten?


15

Ich bin gespannt, wie die USB-Geräteerkennung in Windows funktioniert. ich vorstellen es ist so etwas:

  • Wenn Sie ein Gerät anschließen, sagt es Windows "Hier ist meine Geräte-ID, um Ihnen zu sagen, was ich bin"
  • Windows überprüft, ob Treiber installiert wurden, die dieser Geräte-ID entsprechen. Der Treiber teilt Windows wahrscheinlich mit, wie das Gerät heißen soll - wie "BlackBerry Curve" oder "Canon Printer".
  • Wenn ja, ordnet es dieses Gerät irgendwie diesem Treiber zu
  • Ansonsten sucht es online nach einem passenden Treiber (wenn Sie es zulassen)

Habe ich recht? Wenn ja, bleibt noch ein paar Fragen.

  • Wenn Sie Treiber installieren, wohin gehen sie? Befinden sich die Dateien in einem Ordner oder werden sie der Registrierung hinzugefügt?
  • Was macht Windows, wenn es das Gerät zum ersten Mal erkennt, denkt und schließlich sagt, "Ihr neues Gerät ist installiert und einsatzbereit?"
  • Wo sucht Windows nach fehlenden Treibern? Ist es in ihrer eigenen Datenbank? Übermitteln Gerätehersteller Treiber an Microsoft, um dort aufgenommen zu werden?

Kann jemand erklären, wie dieser Prozess wirklich funktioniert? Tun dies auch andere Betriebssysteme?

Antworten:


22

Der USB-Bus ist physisch so ausgelegt, dass das Einstecken (und Entfernen) eines Steckers vom Host-Controller erkannt werden kann. Wenn dieses "Plug" -Ereignis auftritt, informiert der Host-Controller seinen Gerätetreiber, der den Bus durchsucht, und fordert jedes Gerät auf, sich zu identifizieren.

Alle USB-Geräte enthalten eine Sammlung von Informationen über das Gerät, die als Deskriptoren bezeichnet werden. Gerätedeskriptoren werden von allen Geräten mit demselben Befehl abgerufen. Dadurch kann ein Gerätetreiber für den USB-Bus selbst ein neu angeschlossenes Gerät effektiv fragen, was es ist, und eine angemessene Antwort erwarten.

Von allen Deskriptoren werden nur wenige direkt verwendet, um Treiber an die meisten Geräte anzupassen. Dies liegt daran, dass USB Geräteklassen definiert, und in der Regel reicht der Systemtreiber für jede Geräteklasse aus, um alle Geräte zu handhaben, von denen behauptet wird, sie seien in dieser Klasse.

Alle Tastaturen geben an, in der HID-Klasse (Human Interface) zu sein, wie beispielsweise Mäuse, Tablets und Gamecontroller. Die HID-Klasse verfügt über mehrere Unterklassen (Tastaturen, Mäuse usw.), sodass jede wie erwartet behandelt wird.

Die meisten Festplatten-ähnlichen Geräte behaupten, in der Mass Storage-Klasse zu sein, und der Systemtreiber funktioniert auch für diese.

Neben der Klasse und der Unterklasse enthalten die Deskriptoren auch eine Hersteller-ID (VID), eine Produkt-ID (PID) und eine Revision. Die Lieferanten-IDs werden von der Normenkommission vergeben (meistens in der Reihenfolge der Ausgabe, aber einige Unternehmen haben spezielle Anfragen erhalten: Intel ist beispielsweise 0x8086). Produkt-IDs werden von jedem Hersteller zugewiesen, und die Kombination aus VID und PID muss für jedes freigegebene Produkt eindeutig sein.

Wenn ein Gerät zum ersten Mal installiert wird, werden VID, PID, Revision, Klasse und Unterklasse auf vorhersagbare Weise verwendet, um den geladenen Gerätetreiber auszuwählen. Hersteller- und produktspezifische Namen ermöglichen es einem Anbieter, ein Gerät anzupassen, das andernfalls (fast) korrekt vom Lagersystemtreiber gehandhabt wird.

Ein weiterer wichtiger Deskriptor ist die Geräteseriennummer. Wenn ein Gerät eine Seriennummer hat, kann diese auch beim erneuten Anschließen erkannt und behandelt werden, auch wenn ein anderer physischer USB-Anschluss verwendet wird. Dies ist wichtig für Speichergeräte, damit ihnen derselbe Laufwerksbuchstabe zugewiesen wird, und für Geräte wie Adapter für serielle Anschlüsse und Modems, damit sie die gleiche COM-Anschlussbezeichnung erhalten.

Dieser gesamte Prozess ist unter dokumentiert MSDN , aber die Details verteilen sich auf verschiedene Orte.


Danke für die methodische Erklärung. Sehr interessant!
Nathan Long

3
Die Stunden, in denen ich diese Details aus der Dokumentation und den Beispielen gelesen hatte, waren eine unerwartete Aufgabe, als ich meinen ersten Gerätetreiber für Windows schrieb. Ich bin froh, die Ergebnisse davon zu teilen ...
RBerteig

6

Fragen :

  • Verzeichnisse: Treiber werden in 2 Verzeichnissen installiert. Der laufende Teil wird (in den meisten Fällen) in% RootDir% \ system32 installiert, der Geräteinformationsteil wird in% RootDir% \ inf installiert. Unter dem Inf-Verzeichnis wird für einen installierten / registrierten Treiber eine oem * .inf-Datei erstellt. (* ist eine Zahl). Unter Vista wird der Treiber als Referenz in das Verzeichnis% RootDir% \ system32 \ driverstore kopiert, wenn noch nicht angetroffene Geräte installiert werden.
  • Registry: Ein Treiber wird als Dienst im Kernelmodus installiert. Hierzu werden bestimmte Registrierungsschlüssel für den Treiberdienst erstellt. Es gibt eine andere Stelle unter dem Bustreiber, an der die entsprechenden Geräte einen individuellen Geräteinstanzschlüssel erhalten. In dieser Taste hat das Gerät einen Verweis auf den aktuell für dieses Gerät verwendeten Treiber.
  • Gerät 'Ankunft': Wenn der Bustreiber auf seinem Bus ein neues Gerät findet, erstellt er unter seinem eigenen Schlüssel eine Schlüsselregistrierung, die einer eindeutigen Geräteinstanz-ID entspricht, die zur eindeutigen Identifizierung eines Geräts im System verwendet werden kann. Wenn dieser Schlüssel bereits vorhanden ist, versucht der Bustreiber, das von diesem Knoten referenzierte Gerät zu laden. Wenn dieser Knoten nicht vorhanden ist oder der Treiber nicht geladen wird, versucht das System, einen kompatiblen Treiber für das Gerät zu finden, indem die registrierten Gerätetreiber unter% RootDir% \ inf gescannt werden. Die Treiber, die für dieses Gerät qualifiziert sind, werden aufgelistet und sortiert. Der beste Treiber wird ausgewählt und für das Gerät geladen.
  • Fahrersuche: Treiber werden zuerst im inf-Verzeichnis gesucht. Wenn kein Treiber gefunden wird, fragt Windows den Benutzer, ob er Treiber bereitstellen kann oder ob er auf dem Microsoft-Server suchen soll. Treiberhersteller können ihre Treiber zur Aufnahme in den Microsoft-Gerätetreiberserver einreichen.

Lunatik hat den ersten Teil der Antwort, wie der sogenannte Bustreiber das Gerät findet.


3

Ich möchte ein gutes Buch über usb empfehlen:

  • USB Complete von Jan Axelson

Ich weiß, dass Sie nicht danach gefragt haben, aber es ist gut, ein wenig über die USB-Geräte zu wissen, die eine Verbindung herstellen sollen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.