2011-06-15 15 views
8

Estoy escribiendo un controlador de dispositivo para un dispositivo usb que usa libusb. Cuando intento reclamar el dispositivo, aparece el código de error LIBUSB_ERROR_BUSY (-6). Según la documentación, eso significa que el dispositivo ya ha sido reclamado (link).interfaz libusb ya reclamada

¿Cómo puedo saber qué controlador/programa ha reclamado el dispositivo y, lo que es más importante, cómo puedo, mí mismo, reclamar el dispositivo una vez que se ha reclamado.

Fragmento de código:

r = libusb_claim_interface(handle[0], 0); 
if (r < 0) { 
    fprintf(stderr, "libusb_claim_interface error %d\n", r); 
    goto out_release; 
} 
printf("claimed interface\n"); 

Salida:

libusb_claim_interface error -6 
+0

Encontré esta publicación buscando "_¿Cómo puedo averiguar qué controlador/programa ha reclamado el dispositivo_?", Así que quería vincular esta pregunta: [¿Hay alguna manera de averiguar qué está usando un módulo de kernel de Linux? ] (http://stackoverflow.com/questions/448999/is-there-a-way-to-figure-out-what-is-using-a-linux-kernel-module), que creo que es relevante, porque dice que no es posible ver qué programas reclaman un controlador/módulo. – sdaau

Respuesta

0

lo has llamado antes libusb_set_configuration()libusb_claim_interface()?

Esto debe invocarse incluso si solo hay una configuración en el descriptor.

+0

Lo intenté pero recuperé el mismo error (-6). Tomando un pico en 'usb-devices' desde la terminal se muestra' usb-storage' como el controlador para el dispositivo. Por algún motivo, el dispositivo recibe un controlador asignado y no he podido evitarlo. Lo he intentado usando las reglas de udev. – jairo

10

¿Llama a libusb_detach_kernel_driver() antes de libusb_claim_interface()? Esto puede ser necesario.

1

El problema es muy probable que la interfaz sea reclamada por otro controlador de Linux. llama al libusb_detach_kernel_driver() y especifica el número de interfaz y luego deberías poder conectarlo.