Pagina 1 di 1

Forzare nome ttyUSB [RISOLTO]

Inviato: ven 16 nov 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 16 nov 2012, 12:21
da ilmich
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 16 nov 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 16 nov 2012, 12:36
da ilmich
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 16 nov 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 16 nov 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 19 nov 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 19 nov 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 19 nov 2012, 19:35
da joe
Hai provato con un programma di comunicazione tipo minicom?

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Inviato: lun 19 nov 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 20 nov 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!