2011-01-25 20 views
8

Sto leggendo i dati da più adattatori USB-seriale identici sotto Ubuntu 10.1.Come identificare più adattatori USB-seriale in Ubuntu 10.1

A volte, il loro percorso/dev/tty cambia (ad es. Se altri dispositivi USB sono collegati all'avvio).

Ho bisogno di un modo di riferirsi ripetutamente allo stesso adattatore attraverso tali modifiche.

I dispositivi hanno tutti gli stessi numeri di serie, secondo udevadm.

Penso che l'opzione più probabile sia quella di identificare un adattatore con cui è connessa la porta (non vengono spostati).

Sono in grado di trovare tutti i tipi di percorsi interessanti/dev che potrebbero funzionare, ma nonostante tutta la discussione su udev in linea, non riesco a trovare una dichiarazione definitiva sul fatto che alcuni di questi percorsi siano statici se il dispositivo è collegato a un porta statica.

+1

Ho trovato questa risposta superutente molto utile: http://superuser.com/a/536648/27510 – ergosys

risposta

-1

I dispositivi tutti hanno gli stessi numeri di serie [..]

Gli indirizzi usb-parse-devpath.pm questo utilizzando il bus e la porta id dell'adattatore.

9

C'è una soluzione. È meglio tardi che mai;)

Utilizzare la seguente regola udev per mappare i dispositivi /dev/ttyUSB{?} nel collegamento /dev/usb-ports/%bus_id-%port_id.

Ecco il mio /etc/udev/rules.d/usb-parse-devpath.rules:

ACTION=="add", KERNEL=="ttyUSB[0-9]*", PROGRAM="/etc/udev/rules.d/usb-parse-devpath.pm %p", SYMLINK+="usb-ports/%c" 

e lo script usb-parse-devpath.pm:

#!/usr/bin/perl -w 

@items = split("/", $ARGV[0]); 
for ($i = 0; $i < @items; $i++) { 
    if ($items[$i] =~ m/^usb[0-9]+$/) { 
     print $items[$i + 1] . "\n"; 
     last; 
    } 
} 

Come si può vedere questo ci aiuta a creare collegamenti chiamati a /dev/ttyUSB{?} dispositivi e metterli a /dev/usb-ports nel seguente formato : bus_id-port_id.

$ udevadm info --query=path --name=/dev/ttyUSB0 
/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/ttyUSB0/tty/ttyUSB0 

Così, il bus_id è 3 e port_id è 1 e ora ho seguito nel mio /dev/usb-ports::

$ ls -al /dev/usb-ports 
lrwxrwxrwx 1 root root 10 Май 12 00:26 3-1 -> ../ttyUSB0 

saluti

Ad esempio, il comando successivo me il seguente riporta.

+2

ho scoperto che cambiando print $ elementi [$ i + 1] a stampa $ articoli [$ i + 2] è più utile qui; dal momento che entrambe le porte USB sulla parte anteriore del mio computer sembravano essere "1-1" sotto il precedente! –

+0

@JamesMuscat: Grazie per la risposta. –

+0

Parla di ingegneria! 'ACTION ==" aggiungi ", KERNEL ==" ttyUSB [0-9] * ", SYMLINK + =" porte usb/tty-% s {../ busnum} -% s {../ devpath} "' la stessa cosa. –

1

Proprio come la risposta di Ilya Matvejchikov, una buona soluzione è aggiungere le regole udev per fare ciò che si desidera con il dispositivo. Come te, stavo avendo un problema simile. Avevo un UPS su un adattatore da USB a multi-seriale e occasionalmente il sistema cambiava i numeri/dev/tty.

La mia soluzione era di creare una regola per abbinare il tipo di dispositivo per driver e porta, quindi creare un collegamento simbolico alla porta a cui è stato collegato il mio UPS. Ho usato NUT per monitorare l'UPS, che era sempre collegato alla stessa porta fisica.

# File contents of /etc/udev/rules.d/75-nut-ups.rules 
# Create /dev/nut-ups0 to use as a persistent serial device that can be used 
# reliably by nut to communicate with a UPS attached to the system. 
# The UPS is attached to the first port of a MosSemiconductor dual USB 
# serial adapter. 
KERNELS=="ttyUSB*", SUBSYSTEMS=="usb-serial", DRIVERS=="moschip7720", ATTRS{port_number}=="0", SYMLINK+="nut-ups0" 

Ora configurare DADO ad utilizzare sempre una costante/dev/dado-ups0, come la porta seriale e la regola si prende cura di mappatura correttamente quando il dispositivo USB-seriale viene riconosciuto.

È possibile utilizzare il comando lsusb per scoprire il nome del dispositivo effettivo da utilizzare nella regola quando è collegato.

2

look con $ udevadm info -n /dev/ttyUSB0 -a quale porta il dispositivo USB è collegato. I kernel variabili di uno dei i dispositivi principali dovrebbero essere qualcosa come KERNELS == "1-1.2: 1.0".

creare una regola di udev:

SUBSYSTEM=="tty", KERNELS=="1-1.2:1.0", SYMLINK+="ttyUSB42" 
SUBSYSTEM=="tty", KERNELS=="1-1.3:1.0", SYMLINK+="usb-serial" 

e grilletto udev

$ udevadm trigger 
0

dispositivi USB si può ottenere il numero di porta e l'enumerazione bus/dev.

0

Anche io stavo cercando questo argomento per trovare il dispositivo fisico USB assegnato/connesso a un nome di dispositivo logico/dev. Così, dopo alcuni tentativi ed errori, questo è ciò che ha funzionato meglio per me:

vedere ciò che esistono dispositivi ttyUSBx logici (dove x è 0, 1, 2 ...):

$ ls /dev 

Visualizza autobus e numeri di dispositivo per tutti gli adattatori usb-seriale:

$ lsusb 

Infine, l'uso:

$ udevadm info --name=ttyUSBx --attribute-walk | grep num 

Ora ispezionare l'uscita udevadm per abbinare il nome logico del dispositivo al dispositivo fisico reale. Ecco la mia lista, quando l'ho fatto:

$ lsusb 
Bus 002 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial  (UART) IC 
Bus 002 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port 
Bus 002 Device 002: ID 80ee:0021 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

$ udevadm info --name=ttyUSB0 --attribute-walk | grep num 
    ATTRS{port_number}=="0" 
    ATTRS{urbnum}=="812" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="5" 
    ATTRS{urbnum}=="115" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="1" 
    ATTRS{numa_node}=="-1" 

$ udevadm info --name=ttyUSB1 --attribute-walk | grep num 
    ATTRS{port_number}=="0" 
    ATTRS{urbnum}=="465" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="4" 
    ATTRS{urbnum}=="115" 
    ATTRS{busnum}=="2" 
    ATTRS{devnum}=="1" 
    ATTRS{numa_node}=="-1" 

Così, nel mio caso, ttyUSB0 è associato al dispositivo su BUS2, device5, che è l'USB Future Technology Devices International di adattatore seriale; e allo stesso modo, ttyUSB1 è associato al dispositivo su bus2, device4, che è l'adattatore da USB a seriale di Prolific Technology, Inc..

E come è stato sottolineato, il comando:

$ usb-devices 

ti porterà le stesse informazioni in un modo di una sola riga. Ho pensato di postare i dettagli che mi hanno aiutato a imparare come la roba lavorato dietro le quinte ...

Speranza che è stato utile :)

1

ho molti USB per i dispositivi seriali con ogni molti porti e le soluzioni di cui sopra non lo facevano per me.

L'USB "KERNEL" non era abbastanza nel mio caso, ma ho trovato il numero di porta.

Sono consapevole che quello che sto proponendo ora potrebbe essere considerato un mod folle, ma funziona per me ..
per ora ..

vorrei davvero essere contento di vedere un più elegante suggerimento che realizzare qualcosa di simile ..

Quindi ... Sulla base del precedente modulo di risposta Ilya Matveychikov

file:/etc/udev/rules .d/usb-parse-devpath.sh

#!/bin/bash 

DEVNUM=$(echo "${1}" | rev | cut -d'/' -f4 | rev | tr -d '-' | tr -d '.' | tr -d ':') 
PORTNUM=$(/sbin/udevadm info -a --path=${1} | grep "ATTRS{port_number}" | head -1 | cut -d'"' -f2) 
PRODUCT=$(/sbin/udevadm info -a --path=${1} | grep "ATTRS{product}" | head -1 | cut -d'"' -f2 | tr -d '/' | tr ' ' '_') 

NEWID="ttyUSB_${PRODUCT}_${DEVNUM}${PORTNUM}" 

#echo "${NEWID} :: $1" >> /tmp/DEBUG_udev.txt 

echo "$NEWID" 

E File: /etc/udev/rules.d/99-usb-serial.rules

ACTION=="add", KERNEL=="ttyUSB[0-9]*", PROGRAM="/etc/udev/rules.d/usb-parse-devpath.sh %p", SYMLINK+="TTYUSBs/%c" 

Il risultato qualcosa di simile a questo:

# ls -l /dev/TTYUSBs 

lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435100 -> ../ttyUSB20 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435101 -> ../ttyUSB21 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435102 -> ../ttyUSB22 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435103 -> ../ttyUSB23 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435104 -> ../ttyUSB24 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435105 -> ../ttyUSB25 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435106 -> ../ttyUSB26 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_435107 -> ../ttyUSB27 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436100 -> ../ttyUSB28 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436101 -> ../ttyUSB29 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436102 -> ../ttyUSB30 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436103 -> ../ttyUSB31 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436104 -> ../ttyUSB32 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436105 -> ../ttyUSB33 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436106 -> ../ttyUSB34 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport416_436107 -> ../ttyUSB35 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4341100 -> ../ttyUSB38 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4341101 -> ../ttyUSB39 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4342100 -> ../ttyUSB36 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport4_4342101 -> ../ttyUSB37 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_421100 -> ../ttyUSB2 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_421101 -> ../ttyUSB3 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_422100 -> ../ttyUSB4 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_422101 -> ../ttyUSB5 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport8_423100 -> ../ttyUSB18 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Edgeport8_423101 -> ../ttyUSB19 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_424100 -> ../ttyUSB0 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Edgeport8_424101 -> ../ttyUSB1 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431100 -> ../ttyUSB6 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431101 -> ../ttyUSB7 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431102 -> ../ttyUSB8 
lrwxrwxrwx. 1 root root 10 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_431103 -> ../ttyUSB9 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_0 -> ../ttyUSB10 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_1 -> ../ttyUSB11 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_2 -> ../ttyUSB12 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_3 -> ../ttyUSB13 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433100 -> ../ttyUSB14 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433101 -> ../ttyUSB15 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433102 -> ../ttyUSB16 
lrwxrwxrwx. 1 root root 11 Jan 5 18:46 ttyUSB_Keyspan_USA-49WG_433103 -> ../ttyUSB17