Pagina 1 di 1

Forzare nome ttyUSB [RISOLTO]

Inviato: ven nov 16, 2012 11:24
da tgmx
Ciao Ragazzi,
ho la necessita' di forzare un particolare convertitore USB/RS232 ad avere sempre lo stesso nome (ad esempio /det/ttyUSB100).

Sto cercando qualche guida su che regola impostare per udev ma non riesco a trovarne una che funzioni.

Avete qualche consiglio? Vi e' capitato di risolvere lo stesso problema?

Edit:
Il pc su cui devo impostare la regola ha una Slack un po' datata (forse 12.2) ma vorrei che funzionasse anche su Slackwere piu' recenti.

Re: Forzare nome ttyUSB

Inviato: ven nov 16, 2012 12:21
da miklos
hai letto questa e questa!?!?!?
per me sono i punti di riferimento per udev.

comunque dovrebbe essere semplice quanto carpire alcuni attributi specifici con

Codice: Seleziona tutto

udevadm -a -n /dev/device-che-vuoi
lanciando questo comando ottieni informazioni dal sistema udev relativamente a quella periferica.
una volta trovati i dati univoci (che ti suggerisco essere il vendor_id e il model_id)
scrivi una regola cosi' formata

Codice: Seleziona tutto

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", NAME="/dev/ttyUSB1", GROUP="users", MODE="0666"


ciau

EDIT: ho letto ora il fatto che utilizzi versioni slackware di qualche tempo fa.
la regola d'esempio dovrebbe andare bene, ma il comando udevadm non so se te lo ritrovi, perchè prima si chiamata udevinfo. vedi un po'.

Re: Forzare nome ttyUSB

Inviato: ven nov 16, 2012 12:31
da tgmx
Grazie miklos.
La prima guida che hai postato l'avevo gia' vista in giro ma sembrava vecchia e poi faceva riferimento al comando udevinfo che non avevo trovato.
La seconda non la conoscevo.

Il comando che hai postato funziona se metto:
udevadm info -a -n /dev/ttyUSB0

Ora provo ad aggiungere la regola e ti aggiorno.

Re: Forzare nome ttyUSB

Inviato: ven nov 16, 2012 12:36
da miklos
tgmx ha scritto:La prima guida che hai postato l'avevo gia' vista in giro ma sembrava vecchia e poi faceva riferimento al comando udevinfo che non avevo trovato.
si infatti a prima vista sembra arcaica.. ma come funzionamento di udev e scrittura delle regole è ancora attualissima, tant'e' che è menzionata pure nel secondo link che ti ho postato ;)

contento di esserti stato utile :p

ciau

Re: Forzare nome ttyUSB

Inviato: ven nov 16, 2012 14:00
da tgmx
Probabilmente sbaglio qualcosa perche' non funziona...

Questa e' la procedura che seguo.

1) collego il dispositivo USB
2) eseguo il comando:
udevadm info -a -n /dev/ttyUSB0

Codice: Seleziona tutto

Udevadm info starts with the device specified by the devpath and then                                                                           
walks up the chain of parent devices. It prints for every device                                                                                 
found, all possible attributes in the udev rules key format.                                                                                     
A rule to match, can be composed by the attributes of the device                                                                                 
and the attributes from one single parent device.                                                                                               

  looking at device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0/ttyUSB0/tty/ttyUSB0':                                                     
    KERNEL=="ttyUSB0"                                                                                                                           
    SUBSYSTEM=="tty"                                                                                                                             
    DRIVER==""                                                                                                                                   

  looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0/ttyUSB0':                                                         
    KERNELS=="ttyUSB0"                                                                                                                           
    SUBSYSTEMS=="usb-serial"                                                                                                                     
    DRIVERS=="ftdi_sio"                                                                                                                         
    ATTRS{latency_timer}=="1"                                                                                                                   
    ATTRS{port_number}=="0"                                                                                                                     

  looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0':                                                                 
    KERNELS=="4-1:1.0"                                                                                                                           
    SUBSYSTEMS=="usb"                                                                                                                           
    DRIVERS=="ftdi_sio"                                                                                                                         
    ATTRS{bInterfaceNumber}=="00"                                                                                                               
    ATTRS{bAlternateSetting}==" 0"                                                                                                               
    ATTRS{bNumEndpoints}=="02"                                                                                                                   
    ATTRS{bInterfaceClass}=="ff"                                                                                                                 
    ATTRS{bInterfaceSubClass}=="ff"                                                                                                             
    ATTRS{bInterfaceProtocol}=="ff"                                                                                                             
    ATTRS{supports_autosuspend}=="1"                                                                                                             
    ATTRS{interface}=="USB-RS232 Cable"                                                                                                         

  looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1':                                                                         
    KERNELS=="4-1"                                                                                                                               
    SUBSYSTEMS=="usb"                                                                                                                           
    DRIVERS=="usb"                                                                                                                               
    ATTRS{configuration}==""                                                                                                                     
    ATTRS{bNumInterfaces}==" 1"                                                                                                                 
    ATTRS{bConfigurationValue}=="1"                                                                                                             
    ATTRS{bmAttributes}=="80"                                                                                                                   
    ATTRS{bMaxPower}=="300mA"                                                                                                                   
    ATTRS{urbnum}=="16"                                                                                                                         
    ATTRS{idVendor}=="0403"                                                                                                                     
    ATTRS{idProduct}=="6001"                                                                                                                     
    ATTRS{bcdDevice}=="0600"                                                                                                                     
    ATTRS{bDeviceClass}=="00"                                                                                                                   
    ATTRS{bDeviceSubClass}=="00"                                                                                                                 
    ATTRS{bDeviceProtocol}=="00"                                                                                                                 
    ATTRS{bNumConfigurations}=="1"                                                                                                               
    ATTRS{bMaxPacketSize0}=="8"                                                                                                                 
    ATTRS{speed}=="12"                                                                                                                           
    ATTRS{busnum}=="4"                                                                                                                           
    ATTRS{devnum}=="8"                                                                                                                           
    ATTRS{devpath}=="1"                                                                                                                         
    ATTRS{version}==" 2.00"                                                                                                                     
    ATTRS{maxchild}=="0"                                                                                                                         
    ATTRS{quirks}=="0x0"                                                                                                                         
    ATTRS{avoid_reset_quirk}=="0"                                                                                                               
    ATTRS{authorized}=="1"                                                                                                                       
    ATTRS{manufacturer}=="FTDI"                                                                                                                 
    ATTRS{product}=="USB-RS232 Cable"                                                                                                           
    ATTRS{serial}=="FTUD2XLU"                                                                                                                   

  looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4':                                                                             
    KERNELS=="usb4"                                                                                                                             
    SUBSYSTEMS=="usb"                                                                                                                           
    DRIVERS=="usb"                                                                                                                               
    ATTRS{configuration}==""                                                                                                                     
    ATTRS{bNumInterfaces}==" 1"                                                                                                                 
    ATTRS{bConfigurationValue}=="1"                                                                                                             
    ATTRS{bmAttributes}=="e0"                                                                                                                   
    ATTRS{bMaxPower}=="  0mA"                                                                                                                   
    ATTRS{urbnum}=="189"                                                                                                                         
    ATTRS{idVendor}=="1d6b"                                                                                                                     
    ATTRS{idProduct}=="0001"                                                                                                                     
    ATTRS{bcdDevice}=="0302"                                                                                                                     
    ATTRS{bDeviceClass}=="09"                                                                                                                   
    ATTRS{bDeviceSubClass}=="00"                                                                                                                 
    ATTRS{bDeviceProtocol}=="00"                                                                                                                 
    ATTRS{bNumConfigurations}=="1"                                                                                                               
    ATTRS{bMaxPacketSize0}=="64"                                                                                                                 
    ATTRS{speed}=="12"                                                                                                                           
    ATTRS{busnum}=="4"                                                                                                                           
    ATTRS{devnum}=="1"                                                                                                                           
    ATTRS{devpath}=="0"                                                                                                                         
    ATTRS{version}==" 1.10"                                                                                                                     
    ATTRS{maxchild}=="2"                                                                                                                         
    ATTRS{quirks}=="0x0"                                                                                                                         
    ATTRS{avoid_reset_quirk}=="0"                                                                                                               
    ATTRS{authorized}=="1"                                                                                                                       
    ATTRS{manufacturer}=="Linux 3.2.29-smp uhci_hcd"                                                                                             
    ATTRS{product}=="UHCI Host Controller"                                                                                                       
    ATTRS{serial}=="0000:00:1d.2"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.2':
    KERNELS=="0000:00:1d.2"
    SUBSYSTEMS=="pci"
    DRIVERS=="uhci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x27ca"
    ATTRS{subsystem_vendor}=="0x1462"
    ATTRS{subsystem_device}=="0x7529"
    ATTRS{class}=="0x0c0300"
    ATTRS{irq}=="18"
    ATTRS{local_cpus}=="0000000f"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""


Nell'output ho due "idVendor" ma credo sia buono il primo dato che da dmesg ottengo:

Codice: Seleziona tutto

[20973.750174] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[20973.750187] ftdi_sio 4-1:1.0: device disconnected
[20975.507009] usb 4-1: new full-speed USB device number 8 using uhci_hcd
[20975.744030] usb 4-1: New USB device found, idVendor=0403, idProduct=6001
[20975.744033] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[20975.744036] usb 4-1: Product: USB-RS232 Cable
[20975.744038] usb 4-1: Manufacturer: FTDI
[20975.744040] usb 4-1: SerialNumber: FTUD2XLU
[20975.752073] ftdi_sio 4-1:1.0: FTDI USB Serial Device converter detected
[20975.752100] usb 4-1: Detected FT232RL
[20975.752102] usb 4-1: Number of endpoints 2
[20975.752104] usb 4-1: Endpoint 1 MaxPacketSize 64
[20975.752107] usb 4-1: Endpoint 2 MaxPacketSize 64
[20975.752109] usb 4-1: Setting MaxPacketSize 64
[20975.754081] usb 4-1: FTDI USB Serial Device converter now attached to ttyUSB0
[21146.183021] usb 1-7: reset high-speed USB device number 4 using ehci_hcd


quindi utilizzo idVendor=0403, idProduct=6001 .

3) creo il file /etc/udev/rules.d/70-persistent-usb.rules contenente:

Codice: Seleziona tutto

SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", NAME="ttyUSB100", GROUP="users", MODE="0666"


4) disconnetto e riconnetto il dispositivo USB

A questo punto il device si chiama ancora /dev/ttyUSB0 ...

Re: Forzare nome ttyUSB

Inviato: ven nov 16, 2012 15:47
da targzeta
Prova a creare un link simbolico. La regona NAME può servire solo per fare il match o per rinominare le interfacce di rete:

Codice: Seleziona tutto

 NAME
           The name to use for a network interface. The name of a device node can not be changed by udev, only additional symlinks can be created.


Emanuele

Re: Forzare nome ttyUSB

Inviato: lun nov 19, 2012 10:23
da tgmx
targzeta ha scritto:Prova a creare un link simbolico. La regona NAME può servire solo per fare il match o per rinominare le interfacce di rete:

Codice: Seleziona tutto

 NAME
           The name to use for a network interface. The name of a device node can not be changed by udev, only additional symlinks can be created.


Emanuele


Grande! Funziona!

Ho utilizzato la seguente regola con le correzioni che mi hai suggerito (ho anche aggiunto il seriale ma funzionava anche senza):

Codice: Seleziona tutto

SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTT9CIFQ", SYMLINK+="ttyUSB100", GROUP="users", MODE="0666"


Unica correzione rispetto alla procedura descritta sopra e' che ho dovuto anche riavviare udev altrimenti non funzionava:

sh /etc/rc.d/rc.udev force-restart


Grazie della collaborazione.

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Inviato: lun nov 19, 2012 17:01
da tgmx
Mi correggo, non funziona proprio al 100% .
In pratica il link che viene creato non punta a /dev/ttyUSB0 ma a:

Codice: Seleziona tutto

s -l /dev/ttyPROVA
lrwxrwxrwx 1 root root 15 Nov 19 16:54 /dev/ttyPROVA -> bus/usb/004/028


e tra l'altro non riesco ad utilizzare il device linkato per comunicare in seriale.

Se ad esempio eseguo:

Codice: Seleziona tutto

 echo "aaaaa" >  /dev/ttyUSB0

vedo che il dispositivo riceve i caratteri inviati ma se eseguo:

Codice: Seleziona tutto

echo "aaaaa" >  /dev/ttyPROVA

ottengo:

Codice: Seleziona tutto

bash: echo: write error: Invalid argument


ed il dispositivo nojn riceve niente...

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Inviato: lun nov 19, 2012 19:35
da joe
Hai provato con un programma di comunicazione tipo minicom?

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Inviato: lun nov 19, 2012 22:58
da targzeta
Purtroppo non ho device che si settano come tty via usb. Comunque, tieni presente che le regole di assegnamento vengono eseguito su ciò che viene matchato prima. Quindi assicurati che con le regole precedenti tu riesca a beccare esattamente il ttyUSB0. Se noti, le regole scritte in quella guida, iniziano tutte con 'KERNEL==' per fare il match esattamente con il nome del device che vede il kernel.

Emanuele

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Inviato: mar nov 20, 2012 8:30
da tgmx
Ok, ora ho risolto...

Era tutta colpa di una 'S', ho sostituito SUBSYSTEM con SUBSYSTEMS...

Questa e' la regola funzionante:

Codice: Seleziona tutto

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTT9CIFQ", SYMLINK+="ttyPROVA", GROUP="users", MODE="0666"


Ora il link e' verso ttyUSB0.

Grazie a tutti!