Forzare nome ttyUSB [RISOLTO]

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Forzare nome ttyUSB [RISOLTO]

Messaggio 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.
Ultima modifica di tgmx il mar 20 nov 2012, 8:31, modificato 3 volte in totale.

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Forzare nome ttyUSB

Messaggio 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'.
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: Forzare nome ttyUSB

Messaggio 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.

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Forzare nome ttyUSB

Messaggio 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
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: Forzare nome ttyUSB

Messaggio 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 ...

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Forzare nome ttyUSB

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: Forzare nome ttyUSB

Messaggio 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.

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Messaggio 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...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3790
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Messaggio da joe »

Hai provato con un programma di comunicazione tipo minicom?

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: Forzare nome ttyUSB [QUASI RISOLTO]

Messaggio 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!

Rispondi