J'ai un lance-roquettes USB que je souhaite expérimenter libusb
. Cependant, libusb ne peut pas revendiquer l'interface; probablement parce que la sortie des usb-devices
listes «usbhid» comme pilote pour le périphérique.
Après avoir lu sur Internet, je suis seulement arrivé à la conclusion que je dois détacher ce pilote de l'appareil afin de pouvoir l'utiliser avec libusb. Cependant, je n'ai trouvé aucun moyen définitif de le faire, seulement plusieurs idées et rapports de bogues différents.
Alors, existe-t-il un moyen de détacher le pilote usbhid d'un périphérique qui serait pertinent avec le noyau et les outils fournis avec Ubuntu 11.04?
ÉDITER:
J'ai essayé de créer le fichier
/etc/udev/rules.d/10-usbhid.rules
et en écrivant ce qui suit:
ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Sauvegarde, puis redémarrage. Le fichier est toujours là, mais il ne semble pas fonctionner du tout.
ÉDITER:
D'accord, j'ai essayé ceci:
sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
Après cela, la navigation vers /sys/bus/hid/devices/0003:0A81:0701.0006 et ls donne:
drwxr-xr-x 2 root root 0 2011-05-29 15:46 power
lrwxrwxrwx 1 root root 0 2011-05-29 13:19 subsystem -> ../../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 2011-05-29 13:19 uevent
Il ne répertorie plus un lien symbolique de "pilote" comme il le faisait auparavant, donc je suppose qu'il l'a dissocié. Cependant, toutes les preuves semblent suggérer que le conducteur est encore usbhid. Par exemple, les périphériques USB produisent:
T: Bus=02 Lev=03 Prnt=07 Port=00 Cnt=01 Dev#= 9 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0a81 ProdID=0701 Rev=00.01
S: Manufacturer=Dream Link
S: Product=USB Missile Launcher v1.0
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
libusb retuns toujours -1 sur usb_claim_interface () ....
Je pense que la règle udev suivante fera ce que vous voulez:
Votre utilisateur devra être membre du groupe plugdev pour y accéder. Il n'est pas nécessaire de s'exécuter en tant que root avec cette règle en place.
la source
Pour moi (Debian Sid / Stretch), l'
$id
attribut udev est vide lorsque je branche mon périphérique USB. Il$kernel
contient la chaîne nécessaire pour passer à la dissociation USBHID.Voici les règles udev que j'utilise:
Remplacez bien sûr idVendor et idProduct par les ID de votre appareil.
Pour écrire ce genre de règles, la commande suivante vous montrera tous les attributs que vous pouvez utiliser (pour le périphérique USB donné):
Enfin,
$id
et$kernel
ne sont pas des variables shell; ils sont remplacés par l'analyseur udev. Pour une liste complète de ces variablesman udev
et recherchez%k
.la source