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
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
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:
vedo che il dispositivo riceve i caratteri inviati ma se eseguo:
ottengo:
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!