2011-12-05 16 views
7

Esta pregunta es doble:Linux: Cómo asignar controlador USB al dispositivo

1- ¿Cómo desprender manualmente un controlador de un dispositivo USB y adjuntar una diferente? Por ejemplo, tengo un dispositivo que cuando se conecta automáticamente usa el controlador de almacenamiento usb.

// usbview salida

Vendor Id: xxxx 
Product Id: xxxx 
... 
    Number of Interfaces: 2 
    Interface Number: 0 
     Name: usb-storage 
     Number of Endpoints: 2 
     ... 
    Interface Number: 1 
     Name: (none) 
     Number of Endpoints: 2 
     ... 

no quiero utilizar el controlador USB de almacenamiento, así que tengo una aplicación que se ejecuta en el host en el que yo uso la biblioteca libusb para separar el controlador USB de almacenamiento y luego reclamo la interfaz. Luego puedo enviar datos hacia y desde las aplicaciones que se ejecutan en mi dispositivo USB y en mi sistema host de Linux.

¿Cómo se desconecta un controlador manualmente fuera de una aplicación?

2- ¿Cómo asigno automáticamente el controlador para conectarlo al complemento del dispositivo? Actualmente tengo una configuración de regla udev para configurar los permisos del dispositivo de forma automática.

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666" 

¿Puedo usar las reglas de udev para asignar controladores a interfaces específicas en el dispositivo USB? Por ejemplo, si quisiera que el módulo usbnet se utilizara automáticamente en la interfaz 0 en lugar de usb-storage, ¿es posible en udev?

Gracias,

(estoy un poco confundido acerca de cómo funciona StackExchange con sus diferentes sitios o si son todos iguales. Esta es una pregunta Linux por lo que también fue publicada en Unix & Linux. Perdona si no debería publicarse aquí también, pero StackOverflow también maneja Linux, así que ...)

+0

Pregunta similar en ** Unix y Linux ** http://unix.stackexchange.com/questions/13964/prevent-claiming-of-novelty-usb-device-by-usbhid-so-i-can-control -it-with-libusb –

+0

@AlessandroPezzato, leí ese artículo y eso es similar, pero no la solución a mi problema. Como dije en mi pregunta, tengo una aplicación que puedo ejecutar que usa la API de libusb para separar y reclamar la interfaz.Pero necesito saber cómo desconectar y conectar un LKM desde el símbolo del sistema o automáticamente a través de udev fuera del espacio de la aplicación. – linsek

Respuesta

8

Esta pregunta se parece mucho a un dispositivo USB que contiene un pequeño disco flash que contiene el controlador de Windows, pero en realidad es una especie de dispositivo de acceso a la red (me viene a la mente el módem UMTS). Si este es el caso, intente utilizar USB_ModeSwitch, que contiene una base de datos de dispositivos USB y los comandos y datos que deben usarse para mover el dispositivo del "modo de almacenamiento" al "modo de acceso a la red". Si el dispositivo no está configurado en la base de datos, se puede usar Usb Sniffer for Windows en Windows para rastrear el tráfico USB y extraer el combo de comando/datos necesario.

La automatización de usb_modeswitch, por lo que realiza su magia cuando se conecta su dispositivo se puede hacer usando las reglas de udev. Si usa una distribución basada en Fedora o Ubuntu, esto se maneja cuando instala los paquetes que proporcionan usb_modeswitch (lo siento, no tengo información sobre SUSE, pero creo que es similar). En Fedora, es el paquete use_modeswitch_data, que proporciona un contenedor para el cmd usb_modeswitch y los archivos de reglas necesarios.

Si realmente quiere vincular/desvincular dispositivos USB a los controladores, consulte this LWN article. Como root, echo $usbid > /sys/bus/usb/drivers/usb-storage/unbind desvinculará el dispositivo USB con $usbid del controlador "usb-storage". Usando el mismo comando, pero usando bind en lugar de unbind, intentará vincular el dispositivo al controlador. Pero tenga en cuenta que no tiene sentido (y no funciona) vincular un dispositivo que actúa como un dispositivo de almacenamiento a un controlador usbnet.

+2

Si realmente desea vincular/desvincular dispositivos USB a los controladores, consulte este [artículo de LWN] (http://lwn.net/Articles/143397/). # echo $ usbid>/sys/bus/usb/drivers/usb-storage/unbind desplegará el dispositivo usb con $ usbid del controlador "usb-storage". La misma línea de cm, pero al usar "vincular" en lugar de desvincular, intentará vincular el dispositivo al controlador. Pero tenga en cuenta que no tiene sentido (y no funciona) vincular un dispositivo que actúa como un dispositivo de almacenamiento a un controlador usbnet. –

Cuestiones relacionadas