web-dev-qa-db-fra.com

Relier un périphérique à un module de pilote

J'essaie de mieux comprendre le processus de liaison d'un périphérique à son pilote. J'ai un outil USB (programmeur système pour Arduino) dont les identifiants (produit et fournisseur) sont connus. Le pilote, cdc_acm.ko, ne le reconnaît pas (bien sûr, il ne figure pas dans sa liste de périphériques internes!). Alors ... j'ai chargé le module

Sudo modprobe cdc_acm
lsmod | grep cdc
$>cdc_acm

$>dmesg
...
[41244.510906] usbcore: registered new interface driver cdc_acm
[41244.510915] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Parfait. Ensuite, j'insère le périphérique et la sortie dmesg est la suivante:

...
[41447.794431] usb 2-1.2: new full-speed USB device number 17 using ehci-pci
[41447.887680] usb 2-1.2: New USB device found, idVendor=03eb, idProduct=2ff7
[41447.887690] usb 2-1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[41447.887695] usb 2-1.2: Product: Arduino USB-Serial DFU

Cela me semble que pilote USB a été traité. Laissez-moi vérifier en conséquence ce qui suit http://lwn.net/Articles/143397/

$>ls -la /sys/bus/usb/drivers/usb/usb2/2-1/2-1.2/2-1.2\:1.0/
total 0
drwxr-xr-x 3 root root    0 gen 20 19:29 .
drwxr-xr-x 5 root root    0 gen 20 12:51 ..
-r--r--r-- 1 root root 4096 gen 20 12:58 bAlternateSetting
-r--r--r-- 1 root root 4096 gen 20 12:51 bInterfaceClass
-r--r--r-- 1 root root 4096 gen 20 12:51 bInterfaceNumber
-r--r--r-- 1 root root 4096 gen 20 12:58 bInterfaceProtocol
-r--r--r-- 1 root root 4096 gen 20 12:58 bInterfaceSubClass
-r--r--r-- 1 root root 4096 gen 20 12:58 bNumEndpoints
-r--r--r-- 1 root root 4096 gen 20 12:58 modalias
drwxr-xr-x 2 root root    0 gen 20 12:58 power
lrwxrwxrwx 1 root root    0 gen 20 12:58 subsystem -> ../../../../../../../bus/usb
-r--r--r-- 1 root root 4096 gen 20 12:58 supports_autosuspend
-rw-r--r-- 1 root root 4096 gen 20 12:51 uevent

le lien de module n'existe pas, il semble donc que le périphérique ne soit pas lié au pilote de module USB. C'est bien de noter que le contenu du fichier modalias correspond à ce que j'attendais:

 usb:v03EBp2FF7d0000dc00dsc00dp00icFEisc01ip02in00

Maintenant, j'essaie de relier le périphérique au module cdc_acm avec la commande suivante:

$>Sudo echo -n "2-1.2:1.0" > Sudo /sys/bus/usb/drivers/cdc_acm/bind

la sortie dmesg n'affiche rien de spécifique à la commande qui vient d'être émise.

Qu'est-ce que je fais mal ici? Je m'attendrais au moins à une sortie de débogage. Si j'émettais une requête fautive, j'attendrais au moins un message du noyau en retour ... Au moins, avoir un retour d'information du système m'aiderait à comprendre le problème ... Quelqu'un peut-il m'aider? Merci. PS J'utilise Ubuntu 14.10 64 bits sur les ordinateurs portables Intel Core i3 ASUS F552C.

3
bobuaits

C'est une situation très populaire, l'utilisation de la redirection de shell avec Sudo pour écrire dans un fichier appartenant à la racine. Vous pouvez l'exécuter comme:

Sudo sh -c 'echo -n "2-1.2:1.0" > /sys/bus/usb/drivers/cdc_acm/bind'

Qui exécute Shell en tant que root et utilise la redirection à l'intérieur. Il y a beaucoup d'autres façons, voir Quand j'utilise Sudo avec une redirection, j'obtiens une 'permission refusée'

2
user.dz