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
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.
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. Exécution automatique de l'appilication lorsque vous branchez une clé USB
- 2. Communication avec un périphérique USB
- 3. Périphérique USB connecté
- 4. Programmation d'un périphérique USB sur un Mac
- 5. Allumer l'ordinateur avec un périphérique USB
- 6. Que se passe-t-il lorsque vous exécutez un programme?
- 7. Classe C# représentant un périphérique USB
- 8. Comment vous branchez et fusionnez avec TortoiseSVN?
- 9. Comment écrire un nouveau pilote Linux pour un périphérique i2c?
- 10. Détection d'un périphérique USB connecté en C
- 11. Périphérique USB de contrôle ASP.NET/Silverlight
- 12. Périphérique de stockage USB SerialNumber du pilote minifiltre (du descripteur de périphérique USB)
- 13. Comment capturer l'entrée d'un périphérique USB?
- 14. WP Branchez
- 15. Comment savoir sur quel port un périphérique USB est branché?
- 16. Créer un périphérique USB, le contrôler en Java
- 17. Que se passe-t-il lorsque vous faites glisser l'écran?
- 18. Description détaillée du périphérique HID (USB)
- 19. Que se passe-t-il lorsque vous entrez
- 20. Android: Communiquer avec un périphérique USB servant d'hôte
- 21. Que se passe-t-il en coulisses lorsque je crée un nouveau UIImage par affectation?
- 22. Comment vous assurer qu'un fichier a été enregistré de manière permanente sur un périphérique USB, lorsque l'utilisateur n'utilise pas "Supprimer le périphérique en toute sécurité"?
- 23. attacher périphérique USB à android hôte gphone
- 24. Nom réel (nom complet) du périphérique USB?
- 25. Obtention d'informations sur le périphérique USB NON_HID
- 26. Comment vérifier si un périphérique USB donné est branché?
- 27. Quels problèmes peuvent survenir si un périphérique USB n'est pas compatible USB 2.0?
- 28. Comment obtenir des fichiers à partir d'un périphérique utilisant USB
- 29. Autorun lorsque la clé USB est insérée
- 30. Page Web ASP.NET vers le périphérique se connecter au port USB (COM) du serveur
De quelle manière générale vous donnez une copie à Microsoft (comme dans quel est son terme)? – Will
WHQL. Et non, ce n'est pas le premier pas. – Christopher
Compris :). – Will