Que se passe-t-il lorsque vous twigz un nouveau périphérique USB?

J’ai un appareil intégré avec une connexion USB. Lorsque l’utilisateur twig l’appareil sur son PC (Windows, OSX), comment le système d’exploitation découvre-t-il les pilotes à installer? Comment puis-je sélectionner mes pilotes? Peuvent-ils résider sur un serveur central (géré par le fournisseur du système d’exploitation)?

Ceci est pour Windows:

Lorsqu’un périphérique USB est branché sur le système, le pilote de bus USB est averti. Le pilote de bus envoie une requête USB standard (USB_DEVICE_DESCRIPTOR) à l’appareil. Avec cela, l’appareil indique son nom et son type. (bDeviceClass / bDeviceSubClass / bDeviceProtocol).

Avec cette information, Windows crée une entrée de périphérique dans le système. Ceci l’ID matériel. Le système essaie maintenant de trouver soit un pilote générique capable de gérer le périphérique (HID / UVC), soit un pilote spécifiquement enregistré pour prendre en charge cet ID matériel.

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

Pour OS X:

Eh bien, j’imagine que la première partie est similaire à Windows. Toutefois, le pilote (ou plutôt la stack de pilotes) est sélectionné par un processus appelé correspondance de pilote . Chaque pilote est livré avec un fichier de dictionnaire XML spécial qui décrit le ou les périphériques auxquels le pilote est destiné.

L’une des clés du dictionnaire est la clé IOProviderClass qui indique au système d’exploitation quelle famille d’appareils le pilote utilise. Les pilotes qui ont été chargés peuvent fournir des “nubs” qui sont des interfaces auxquelles d’autres pilotes peuvent se connecter. Les pilotes qui tentent d’attacher des nubs sont déterminés par la clé IOProviderClass.

Ainsi, par exemple, lorsque vous twigz un lecteur USB sur votre Mac, le pilote du contrôleur USB déjà chargé le détecte et fournit un nœud pour le périphérique. Un pilote USB de bas niveau est sélectionné par correspondance de pilote – en vérifiant la clé / les valeurs du dictionnaire par rapport aux valeurs obtenues par le périphérique, par exemple l’ID du fournisseur, le type de périphérique, etc. Celui avec le score le plus élevé est attaché au nœud.

Ce nouveau pilote peut fournir lui-même des nœuds auxquels d’autres pilotes peuvent se connecter. Par exemple, si vous connectez un lecteur de disque USB, la stack USB crée un nœud auquel un pilote de périphérique 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 nœuds pour les pilotes BSD (un par partition) qui à leur tour créeront 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, il vous suffit d’append des paires de valeurs clés pour le périphérique auquel votre pilote est destiné, ce qui fait que votre pilote obtient un score vraiment élevé. En général, il suffit de saisir les clés de votre identifiant / modèle de fournisseur. Cependant, je pense que vous pouvez remplacer la méthode de correspondance (les pilotes de périphérique sont écrits dans un ensemble restreint de C ++) pour donner à votre pilote un score vraiment élevé.

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