J'essaie d'obtenir un périphérique FTDI USB-Serial avec un PID personnalisé pour se connecter automatiquement (ou même manuellement) à ttyUSB%n, sans grand succès. Le VID/PID normal de l'appareil est 0403/6001. Lorsqu'il est programmé de cette façon, il fonctionne parfaitement et se connecte automatiquement à ttyUSB0 lorsqu'il est branché. Même avec le pilote recompilé pour respecter notre nouveau PID, lorsqu'il est programmé avec celui personnalisé, ttyUSB0 n'apparaît pas, mais il le reconnaît comme un périphérique ftdi_sio et charge le pilote.
J'ai ajouté notre PID à l'en-tête et à la source :
// 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é l'intégralité du noyau et reflashé l'appareil. Lorsque je branche l'appareil, j'obtiens :
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 affiche le VID/PID personnalisé correct. Le pilote semble reconnaître qu'il est censé utiliser ftdi_sio avec lui, mais ne l'attache pas à ttyUSB0 comme il le ferait avec le PID non modifié. Des suggestions sur ce que je fais mal ici ?
Réponse acceptée :
Vous n'avez pas besoin de modifier le noyau une seule fois ; vous pouvez le remplacer.
- Débranchez l'appareil
modprobe ftdi_sio
echo 0403 6001 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
- Branchez l'appareil
Et votre appareil devrait fonctionner.
Votre autre alternative est d'utiliser le bind
interface sysfs ; Je suggère d'utiliser lsusb -t
pour déterminer le bon chemin + interface dans ce cas.
En utilisant un exemple partiel de mon système, d'un périphérique de stockage USB (ce serait très similaire pour USB-série).
$ 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
Le format du numéro est :BUS-PORT(.PORT)+:1.INTERFACE
. Le seul nombre qui n'est pas visible dans la sortie lsusb est le premier chiffre après les deux points ; et ça a toujours été un 1
dans mon expérience. Quelqu'un avec une connaissance plus approfondie du noyau peut probablement me dire ce que c'est et fournir un contre-exemple.