GNU/Linux >> Tutoriales Linux >  >> Linux

¿Conexión de un dispositivo serie USB con Pid personalizado a Ttyusb0 integrado?

Estoy intentando obtener un dispositivo FTDI USB-Serial con un PID personalizado para conectarlo automáticamente (o incluso manualmente) a ttyUSB%n, sin mucho éxito. El VID/PID normal del dispositivo es 0403/6001. Cuando se programa de esta manera, funciona perfectamente y se conecta automáticamente a ttyUSB0 cuando se conecta. Incluso con el controlador recompilado para respetar nuestro nuevo PID, cuando se programa con uno personalizado, ttyUSB0 no aparece, pero lo reconoce como un dispositivo ftdi_sio y carga el controlador.

He agregado nuestro PID al encabezado y fuente:

// in ftdi_sio_ids.h
#define FTDI_CUSTOM_PID 0xABCD // not the actual pid
// then in ftdi_sio.c
static struct usb_device_id id_table_combined [] = {
    // devices....
    { USB_DEVICE(FTDI_VID, FTDI_CUSTOM_PID) },
    // ....

Recompilé todo el kernel y actualicé el dispositivo. Cuando conecto el dispositivo obtengo:

usb 1-1: new full-speed USB device number 2 using at91_ohci
usbcore: registered new interface driver usbserial
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver

lsusb muestra el VID/PID personalizado correcto. El controlador parece reconocer que se supone que debe usar ftdi_sio con él, pero no lo conecta a ttyUSB0 como lo haría con el PID no modificado. ¿Alguna sugerencia sobre lo que estoy haciendo mal aquí?

Respuesta aceptada:

No es necesario que modifique el kernel solo una vez; puede anularlo.

  1. Desconecte el dispositivo
  2. modprobe ftdi_sio
  3. echo 0403 6001 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
  4. Conecte el dispositivo

Y tu dispositivo debería funcionar.

Su otra alternativa es usar el bind interfaz sysfs; Sugiero usar lsusb -t para averiguar la ruta+interfaz correcta en ese caso.

Usando un ejemplo parcial de mi sistema, de un dispositivo de almacenamiento usb (sería muy similar para usb-serial).

$ lsusb -t
...
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
    |__ Port 1: Dev 5, If 0, Class=Hub, Driver=hub/3p, 5000M
        |__ Port 3: Dev 6, If 0, Class=Hub, Driver=hub/3p, 5000M
            |__ Port 3: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
 ...
 $ echo '4-1.3.3:1.0' >/sys/bus/usb/drivers/usb-storage/bind

El formato del número es:BUS-PORT(.PORT)+:1.INTERFACE . El único número que no está visible en la salida de lsusb es el primer dígito después de los dos puntos; y siempre ha sido un 1 en mi experiencia. Alguien con un conocimiento más profundo del kernel probablemente pueda decirme qué es y proporcionar un contraejemplo.

Relacionado:¿Recuperar archivos del servidor de archivos local?
Linux
  1. Replique su configuración personalizada de Linux con DistroTweaks

  2. Cómo cifrar una partición con DM-Crypt LUKS en Linux

  3. Linux:¿Cómo encontrar el controlador de dispositivo utilizado para un dispositivo?

  4. ¿Encontrar capacidades del controlador/dispositivo Wifi?

  5. Controlador de dispositivo IOCTL Linux

Computadora integrada compacta con IA Axiomtek eBOX560-900-FL se ejecuta en Ubuntu

¿Por qué necesitamos un gestor de arranque en un dispositivo integrado?

Desconecte y vuelva a conectar ttyUSB0 mediante programación en Linux

Postgresql 9.3 en Centos 7 con PGDATA personalizado

Inicie zsh con un zshrc personalizado

umask actual de un proceso con <pid>