Quels pilotes sont utilisés par la souris USB dans le noyau Linux?
J'ai lu de LDD3 chapitre 14 à propos de la connexion à chaud des pilotes.J'ai besoin d'écrire un pilote de souris usb qui charge quand j'ai brancher le matériel. Maintenant, en faisant quelques expériences que je viens de savoir qu'il y a un pilote nommé "hid-générique", qui est appelée lors de la brancher-débrancher.
[ 6654.232046] usb 3-1: new low-speed USB device number 3 using uhci_hcd
[ 6654.462061] usb 3-1: New USB device found, idVendor=093a, idProduct=2510
[ 6654.462067] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6654.462071] usb 3-1: Product: USB OPTICAL MOUSE
[ 6654.462074] usb 3-1: Manufacturer: PIXART
[ 6654.489316] input: PIXART USB OPTICAL MOUSE as /devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/input/input12
[ 6654.489445] hid-generic 0003:093A:2510.0004: input,hidraw0: USB HID v1.10 Mouse [PIXART USB OPTICAL MOUSE] on usb-0000:00:1d.1-1/input0
Lsmod montre,
Module Size Used by
hid_generic 12541 0
usbhid 47259 0
hid 105241 2 hid_generic,usbhid
psmouse 102541 0
Mes doutes sont comme suit,
1) Pour faire mon module de charge (hotplug) lorsque la souris se branche, je dois désactiver ces 3 pilotes dans le noyau et de construire ensemble un noyau avec mon pilote avec le fournisseur et l'ID de périphérique dans id_table. Droit?
2) j'ai lu aussi sur l'USB de base des pilotes et des pilotes de périphérique USB. De sorte que ces pilotes HID sont les principaux pilotes ou des pilotes de périphérique?
3) Qui sont les principaux moteurs et de pilote de périphérique dans le cas de l'USB de la souris? Et où puis je les trouver dans les sources du noyau?
Grâce,
Sunil.
source d'informationauteur Sunil Shahu
Vous devez vous connecter pour publier un commentaire.
Je vais essayer de répondre à tes questions une par une :
1) Pour faire mon module de charge (hotplug) lorsque la souris se branche, je dois désactiver ces 3 pilotes dans le noyau et de construire ensemble un noyau avec mon pilote avec le fournisseur et l'ID de périphérique dans id_table. Droit?
Oui, mais il ya des choses supplémentaires que vous devez prendre soin de. D'abord comprendre comment un module particulier(pilote) est chargé. La clé, c'est
MODULE_DEVICE_TABLE(usb, &my_id_table);
Chaque fois qu'un module particulier est "installé" (à l'aide demake modules_install
), une entrée, en fonction de l'id de la table passée enMODULE_DEVICE_TABLE
est créé dans/lib/modules/<your_kernel>/modules.usbmap
et/lib/modules/<your_kernel>/modules.dep
fichier(recherche de la chaîne "usbhid" dans les fichiers). Chaque fois qu'un nouveau périphérique usb est détecté, le noyau lit ces fichiers afin de trouver la correspondance des paramètres. S'il est constaté, le module suivant est chargé à partir du chemin d'accès correspondant trouvé dans/lib/modules/<your_kernel>/modules.dep
qui détient l'info. sur le chemin où se trouve le pilote et de ses dépendances.Donc, maintenant, même si vous décharger(rmmod)
usbhid
à partir du noyau, il sera de nouveau chargé lorsque vous insérez à nouveau votre souris. Pour éviter ce phénomène, vous devez modifier ces fichiers, c'est à dire supprimer les entrées de fichiers. Pour ce faire, "déplacer" leusbhid
pilote de son tracé d'origine(généralement situé à/lib/modules/<your_kernel>/kernel/drivers/hid/usbhid/usbhid.ko
à un endroit sûr. Maintenant reconstruire les dépendances telles que les entrées sont supprimées à partir de la dépendance des fichiers.Maintenant, vous avez besoin pour créer des entrées de votre pilote. Il suffit d'installer votre pilote et vous êtes bon pour aller!
Donc, pour résumer :
Maintenant vérifier les fichiers de dépendance pour la chaîne "usbhid" de nouveau. Il ne devrait pas être là!
Après cette étape, la recherche de la chaîne de caractères correspondant à votre module dans les fichiers de dépendance, et il devrait être là! À partir de ce moment, chaque fois que vous insérez la souris(ou de démarrage lui-même) de votre pilote sera chargé, au lieu de l'original.
Une fois que vous êtes fini de jouer avec votre pilote, vous pouvez copier l'original
usbhid
fichier à son origine, de destination et de reconstruire les fichiers de dépendance (sudo depmod -a
)Maintenant, je vois aussi que vous essayez d'utiliser des fournisseurs et de l'id de l'appareil pour l'adapter à votre appareil, dans ce cas, le pilote ne fonctionne que pour votre de la souris. La méthode recommandée consiste à utiliser les id de classe, ce qui rend votre travail de pilote pour tout souris usb.
2) j'ai lu aussi sur l'USB de base des pilotes et des pilotes de périphérique USB. De sorte que ces pilotes HID sont les principaux pilotes ou des pilotes de périphérique?
usbhid
est fondamentalement un "pilote de périphérique". Le classement des pilotes pourrait être informés sur : noyau de pilotes, les pilotes de contrôleur d'hôte et les pilotes de périphérique :Pilotes de périphérique : C'est le logiciel qui permet de contrôler les appareils. Par exemple souris usb, pci carte ethernet, usb clé usb, i2c basé sur accéléromètre.
Pilotes de Contrôleur d'hôte : C'est le logiciel écrit pour contrôler le contrôleur de bus. Par exemple, les Contrôleurs hôtes USB(EHCI, UHCI, OHCI, etc.), PCI Contrôleur Hôte, I2C Maîtres, etc.
Les principaux moteurs : Ces effectivement colles le évoquées ci-dessus pilotes. Sont des exemples de base USB, PCI core, etc. Les principaux moteurs fournit les routines d'assistance(Api) de telle sorte que le dispositif hôte et le contrôleur de pilote pourrait faire usage d'entre eux(notion de module d'empilage!). Ce sont ceux qui lient le périphérique à son pilote. Il existe de nombreux autres services fournis par les principaux moteurs.
Exemple de code pour le Pilote de Périphérique USB :
http://lxr.free-electrons.com/source/drivers/hid/usbhid/usbmouse.c
Vous pouvez trouver le Contrôleur Hôte USB Pilotes sous :
http://lxr.free-electrons.com/source/drivers/usb/host/
USB de Base réside ici : http://lxr.free-electrons.com/source/drivers/usb/core/
Je pense que cela répond également à votre troisième question!
Espère que cela a aidé.
Le pilote de périphérique est
usbhid
.Pour l'empêcher de s'attacher à votre appareil, ajouter un
HID_QUIRK_IGNORE
entrée àdrivers/hid/usbhid/hid-quirks.c
ou utiliser lequirks
paramètre de lausbhid
module.