18 votes

Comment fonctionne la reconnaissance des dispositifs USB ?

Je suis curieux de savoir comment fonctionne la reconnaissance des périphériques USB dans Windows. I imaginez c'est quelque chose comme ça :

  • Lorsque vous branchez un périphérique, il dit à Windows "voici mon ID de périphérique pour vous dire ce que je suis".
  • Windows vérifie si des pilotes correspondant à ce numéro de périphérique ont été installés. Le pilote indique probablement à Windows comment le périphérique doit être appelé, par exemple "BlackBerry Curve" ou "Canon Printer".
  • Si c'est le cas, il associe d'une manière ou d'une autre ce périphérique avec ce pilote.
  • Sinon, il recherche un pilote correspondant en ligne (si vous le laissez faire).

Est-ce que j'ai raison ? Si oui, ça laisse encore des questions.

  • Lorsque vous installez des pilotes, où vont-ils ? Sont-ils des fichiers dans un dossier, ou sont-ils ajoutés au registre ?
  • Que fait Windows lorsqu'il reconnaît l'appareil, réfléchit et dit finalement "votre nouvel appareil est installé et prêt à être utilisé" ?
  • Où Windows recherche-t-il les pilotes manquants ? Est-ce dans sa propre base de données ? Les fabricants de périphériques soumettent-ils les pilotes à Microsoft pour qu'ils y soient inclus ?

Quelqu'un peut-il expliquer comment ce processus fonctionne réellement ? Par ailleurs, les autres systèmes d'exploitation procèdent-ils différemment ?

28voto

RBerteig Points 3305

Le bus USB est physiquement conçu pour que l'acte d'insérer (et de retirer) une fiche puisse être reconnu par le contrôleur hôte. Lorsque cet événement "plug" se produit, le contrôleur hôte informe son pilote de périphérique qui scanne le bus et demande à chaque périphérique de s'identifier.

Tous les périphériques USB contiennent un ensemble d'informations sur le périphérique, appelé descripteurs. Les descripteurs de périphériques sont récupérés sur tous les périphériques avec la même commande. Cela permet à un pilote de périphérique pour le bus USB lui-même de demander effectivement à un périphérique nouvellement connecté ce qu'il est, et d'espérer obtenir une réponse raisonnable.

Parmi tous les descripteurs, seuls quelques-uns sont directement utilisés pour faire correspondre les pilotes à la plupart des périphériques. Cela est dû au fait que l'USB définit des classes de périphériques et que, généralement, le pilote système pour chaque classe de périphérique est suffisant pour gérer tous les périphériques qui prétendent appartenir à cette classe.

Tous les claviers prétendront faire partie de la classe HID (Human Interface), tout comme les souris, les tablettes et les contrôleurs de jeux, par exemple. La classe HID comporte plusieurs sous-classes (claviers, souris, etc.), et chacune d'entre elles est traitée de la manière prévue.

La plupart des périphériques de type disque se revendiquent de la classe Mass Storage, et le pilote système fonctionne également pour eux.

En plus de la classe et de la sous-classe, les descripteurs comprennent également l'ID du fournisseur (VID), l'ID du produit (PID) et la révision. Les ID des fournisseurs sont attribués par le comité de normalisation (la plupart du temps dans l'ordre d'émission, mais certaines entreprises ont reçu des demandes spéciales : intel est 0x8086, par exemple). Les ID des produits sont attribués par chaque fournisseur, et la combinaison du VID et du PID doit être unique pour chaque produit publié.

Lorsqu'un périphérique est installé pour la première fois, le VID, le PID, la révision, la classe et la sous-classe sont utilisés de manière prévisible pour choisir le pilote de périphérique qui est chargé. Le fait d'avoir des noms spécifiques au fournisseur et au produit permet à un fournisseur de personnaliser un périphérique qui pourrait autrement être géré (presque) correctement par le pilote système standard.

Un autre descripteur important est le numéro de série du dispositif. Si un périphérique possède un numéro de série, il peut être reconnu et traité de la même manière lorsqu'il est rebranché, même si un port USB physique différent est utilisé. C'est important pour les périphériques de stockage afin qu'ils reçoivent la même lettre de lecteur, et pour les périphériques tels que les adaptateurs de port série et les modems afin qu'ils reçoivent la même désignation de port COM.

L'ensemble de ce processus est documenté à l'adresse suivante エムエスディーエヌ mais les détails sont dispersés dans divers endroits.

7voto

Bobby Points 1039

Questions :

  • Répertoires : Les pilotes sont installés dans 2 répertoires. La partie exécutable est (dans la plupart des cas) installée dans %RootDir%. \system32 la partie information sur le dispositif est installée dans %RootDir%. \inf. Sous le répertoire inf, pour un pilote installé/enregistré, un fichier oem*.inf est créé. (* est un numéro). Sous Vista, le pilote est copié dans le répertoire %RootDir%. \system32\driverstore comme référence lors de l'installation de périphériques non encore rencontrés.
  • Registre : Un pilote est installé comme un service en mode noyau. Pour cela, certaines clés de registre sont créées pour le service du pilote. Il existe un autre endroit sous le pilote de bus, où les périphériques correspondants obtiennent une clé d'instance de périphérique individuelle. Dans cette clé, le périphérique a une référence au pilote actuellement utilisé pour ce périphérique.
  • Dispositif "arrivée" : Lorsque le pilote de bus trouve un nouveau périphérique sur son bus, il crée un registre de clés sous sa propre clé qui correspond à un id d'instance de périphérique unique, qui peut être utilisé pour identifier de manière unique un périphérique sur le système. Si cette clé existe déjà, le pilote de bus essaie de charger le périphérique référencé par ce nœud. Si ce noeud n'existe pas, ou si le pilote ne se charge pas, le système essaie de trouver un pilote compatible pour le périphérique, en analysant les pilotes de périphériques enregistrés sous %RootDir%. \inf. Les pilotes qui se qualifient pour ce dispositif sont énumérés et triés. Le meilleur pilote est alors sélectionné et chargé pour le dispositif.
  • Recherche de conducteur : Les pilotes sont recherchés en premier dans le répertoire inf. Si aucun pilote n'est trouvé, Windows demande à l'utilisateur s'il peut fournir des pilotes ou s'il doit chercher sur le serveur de Microsoft. Les fabricants de pilotes peuvent soumettre leurs pilotes pour qu'ils soient inclus dans le serveur de pilotes de périphériques de Microsoft.

Lunatik a la première partie de la réponse, comment le soi-disant pilote de bus trouve le périphérique.

3voto

Candidasa Points 1560

J'aimerais vous recommander un bon livre sur l'usb :

  • USB complète par Jan Axelson

Je sais que vous ne l'avez pas demandé, mais il est bon d'en savoir un peu plus sur les périphériques usb qui sont censés se connecter.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X