2010-06-10 3 views
2

J'ai un périphérique intégré avec une connexion USB. Lorsque l'utilisateur branche l'appareil sur son PC (Windows, OSX), comment le système d'exploitation détecte-t-il les pilotes à installer? Comment puis-je obtenir mes pilotes à être sélectionnés? Peuvent-ils résider sur un serveur central (géré par le fournisseur du système d'exploitation)?que se passe-t-il lorsque vous branchez un nouveau périphérique USB?

Répondre

6

C'est pour Windows:

Lorsqu'un périphérique USB est branché sur le système, le conducteur de bus USB est informé. Le pilote de bus envoie une demande USB standard (USB_DEVICE_DESCRIPTOR) à l'appareil. Avec cela, l'appareil signale son nom et son type. (bDeviceClass/bDeviceSubClass/bDeviceProtocol). Avec ces informations, Windows crée une entrée de périphérique dans le système. C'est l'ID de matériel. Le système essaie maintenant de trouver un pilote générique capable de gérer le périphérique (HID/UVC) ou un pilote qui s'est enregistré spécifiquement pour prendre en charge cet ID de matériel.

Pour enregistrer un pilote en tant que gestionnaire d'un périphérique spécifique, vous devez installer le pilote dans le système, ou vous devez en fournir un à Microsoft, qu'il peut fournir sur ses serveurs.

+0

De quelle manière générale vous donnez une copie à Microsoft (comme dans quel est son terme)? – Will

+1

WHQL. Et non, ce n'est pas le premier pas. – Christopher

+0

Compris :). – Will

7

Pour OS X:

Eh bien, j'imagine que la première partie est similaire à Windows. Cependant, le pilote (ou plutôt la pile de pilotes) est sélectionné par un processus connu sous le nom driver matching. Chaque pilote est livré avec un fichier de dictionnaire XML spécial qui décrit le (s) périphérique (s) pour lequel le pilote est destiné.

L'une des clés du dictionnaire est la clé IOProviderClass qui indique au système d'exploitation à peu près à quelle famille de périphériques le pilote appartient. Les pilotes qui ont été chargés peuvent fournir des "nubs" qui sont des interfaces auxquelles les autres pilotes peuvent s'attacher. Les pilotes qui tentent de se connecter à nubs sont déterminés par la clé IOProviderClass. Par exemple, lorsque vous branchez une clé USB dans votre Mac, le pilote du contrôleur USB déjà chargé le détecte et fournit un nub pour l'appareil. Un pilote USB de bas niveau est sélectionné par le pilote correspondant - vérifier la clé/valeurs dans le dictionnaire par rapport aux valeurs obtenues à partir du dispositif, par ex. identifiant du fournisseur, type de périphérique, etc. et un score est dérivé pour chaque pilote de la classe du fournisseur d'E/S correct. Celui avec le plus haut score est attaché au nœud.

Ce nouveau pilote peut lui-même fournir des Nubs pour les autres pilotes à attacher. Par exemple, si vous connectez un lecteur de disque USB, la pile USB crée un nub auquel un pilote de périphérique de bloc SCSI doit se connecter. Normalement, cela entraînera le chargement du pilote de périphérique de bloc SCSI standard d'Apple qui fournira à son tour des points de connexion pour les pilotes BSD (un par partition) qui à son tour créera le nœud de périphérique BSD dans le système de fichiers dev.

Si vous voulez que votre pilote soit sélectionné au-dessus des autres, tout ce que vous avez à faire est d'ajouter des paires de valeur de clé pour le périphérique pour lequel votre pilote obtient un score vraiment élevé. Habituellement, il suffit de mettre des clés pour l'identifiant/modèle de votre fournisseur. Cependant, je pense que vous pouvez remplacer la méthode de correspondance (les pilotes de périphériques sont écrits dans un ensemble restreint de C++) pour donner à votre pilote un score vraiment élevé.

C'est une vue de haut niveau. Cependant, il ya un certain nombre d'années depuis que j'ai fait tout cela, alors assurez-vous de lire les documents Apple actuels.

+1

Désolé je ne peux pas accepter * deux * réponses – Will

+0

@Will: pas de problème. J'ai apprécié de me souvenir des jours de mon pilote de périphérique, de toute façon. – JeremyP

Questions connexes