Tengo un lanzador de cohetes USB con el que deseo experimentar libusb
. Sin embargo, libusb no puede reclamar la interfaz; presumiblemente porque la salida de las usb-devices
listas 'usbhid' como el controlador del dispositivo.
Después de leer en Internet, solo llegué a la conclusión de que necesito desconectar este controlador del dispositivo para poder usarlo con libusb. Sin embargo, no he encontrado una sola forma definitiva de hacerlo, solo varias ideas diferentes e informes de errores.
Entonces, ¿hay alguna forma de desconectar el controlador usbhid de un dispositivo que sería relevante con el kernel y las herramientas suministradas con Ubuntu 11.04?
EDITAR:
Traté de crear el archivo
/etc/udev/rules.d/10-usbhid.rules
y escribiendo lo siguiente:
ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Guardando, luego reiniciando. El archivo todavía está allí, pero no parece estar funcionando en absoluto.
EDITAR:
Bien, probé esto:
sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
Después de eso, navegando a /sys/bus/hid/devices/0003:0A81:0701.0006 y ls produce:
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
Ya no enumera un enlace simbólico de "controlador" como lo hizo antes, por lo que supongo que lo desvincula. Sin embargo, toda la evidencia parece sugerir que el controlador todavía está usbhid. Por ejemplo, los dispositivos usb producen:
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 todavía vuelve a ejecutar -1 en usb_claim_interface () ....
Creo que la siguiente regla de udev hará lo que quieras:
Su usuario deberá ser miembro del grupo plugdev para obtener acceso. No hay necesidad de ejecutar como root con esta regla en su lugar.
fuente
Para mí (Debian sid / stretch), el
$id
atributo udev está vacío cuando conecto mi dispositivo USB. Es$kernel
que contiene la cadena necesaria para pasar a la desvinculación de USBHID.Aquí están las reglas de udev que estoy usando:
Reemplace idVendor e idProduct con las ID de su dispositivo, por supuesto.
Para escribir este tipo de reglas, el siguiente comando le mostrará todos los atributos que puede usar (para el dispositivo USB dado):
Finalmente,
$id
y$kernel
no son variables de shell; son reemplazados por el analizador udev. Para obtener una lista completa de estas variables,man udev
busque%k
.fuente