Come abbinare un dispositivo ttyUSBX a un dispositivo seriale USB


21

driver opzione correttamente abbinato ID USB e carica driver per questo dispositivo. Per esempio

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

Crea inoltre dispositivi ttyUSBX per la gestione dell'hardware

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

Tuttavia, ho più di un dispositivo seriale USB e voglio sapere quale ttyUSB è per quale USBID. Ex. / dev / ttyUSB1 -> 19d2: 0031

Conosci qualche punto in cui posso ottenere queste informazioni?


Se conosci dettagli come il fornitore / prodotto, questa risposta è ottima
earcam il

Risposte:


12

Dai un'occhiata al filesystem sysfs. Un esempio per il mio seriale USB:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

Come puoi vedere, è ttyUSB0mappato 067b:2303sul mio computer. Altre località che vale la pena esplorare sono /sys/class/tty/. Prestare attenzione ai collegamenti simbolici.


hai fatto qualcosa per farlo elencare anche il PRODOTTO?
Igor Stoppa,

@IgorStoppa, prova ad esempio catil ueventfile dal risultato di find /sys -name ttyACM0. Sostituisci il nome del nodo del tuo dispositivo seriale.
Sherrellbc,

9

Puoi provare a vedere se i tuoi dispositivi sono registrati in / dev / serial / by-id /

ls -l / dev / serial / by-id

Questi nomi dovrebbero essere coerenti e punteranno (link simbolico) al ttyUSBx corretto


Puoi aggiungere alcuni chiarimenti, esempi, ecc. La risposta on-line non è valida in SE
Romeo Ninov,

@RomeoNinov Ok, ho aggiunto alcuni chiarimenti come da lei richiesto. Questo non è esattamente più difficile che guardare semplicemente in un'altra directory, quindi non riesco a vedere come rendere la risposta più elaborata di quanto possa migliorare qualsiasi cosa. Mi dispiace per quello.
Waxhead,

Ho due adattatori identici (due Arduinos) collegati a un Raspberry Pi. ls -l /dev/serial/by-idrestituisce solo un adattatore ../../ttyUSB1, mentre ls -l /sys/bus/usb-serial/devicesmi mostra entrambi. Quindi non penso che questa sia una buona risposta.
Daniel F,

6

Ho avuto un problema simile .

Scrivi questo in /etc/udev/rules.d/50-usb.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

all'estremità. Reboot.

Ora puoi usare /dev/ONDAper accedere al tuo dispositivo ONDA.

Se vuoi che utenti non root possano usarli, allora aggiungi

, MODE="0666"

alla fine di ogni riga.


L'ho fatto e controllato i file a cui si collegano. il prodotto che ho ha più interfacce, come disco fisso, seriale USB. Mentre mi aspettavo il collegamento a / dev / ttyACM0 ma era a / dev / sda. un modo per definire nel file delle regole quale tipo di dispositivo applicare la regola? Ho scritto le regole in /etc/udev/rules.d/99-ftdi.rules
nurp,

ok lo ha trovato: aggiunto SUBSYSTEM == "tty" ai parametri della regola. questo valore può essere trovato nell'output di udevadm info --name=/dev/ttyACM0
nurp il

3

Vorrei usare udev e scrivere alcune regole che creano collegamenti simbolici per i dispositivi.

Per ottenere informazioni sufficienti per distinguere i dispositivi, provare qualcosa del genere per tutti i dispositivi:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk

1

I seguenti comandi mi daranno un elenco dei nomi dei dispositivi ttyUSB associati a 19d2: 0016 (che è l'id "modalità modem" di uno stick ZTE MF831 LTE, il tuo potrebbe differire.):

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

Questo farà scorrere un elenco di file con nome file ttyUSB *, inclusi collegamenti simbolici, in / sys / bus / usb / devices. Nei risultati cercheremo un file chiamato modalias e cercheremo una stringa contenente l'id fornitore "v" "19d2" e l'id prodotto "p" 0016. Se l'output corrisponde, eseguiremo l'eco di una stringa con il prefisso "/ dev / "davanti all'USB? nome. Dopo il primo o l'ultimo (il numero più alto) è la porta del modem per i dispositivi ZTE. Puoi fare eco ai risultati in un file in / tmp / e head -n1 o tail -n1 le righe di conseguenza. Se si dispone di hub, potrebbe essere necessario aumentare maxdepth.

Questo non è il modo più elegante, ma funzionerà su quasi tutte le varianti di Linux.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.