GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare quale porta seriale è in uso?

La domanda:

Ho collegato un dispositivo (es. modem GSM) tramite una porta seriale (aka RS-232) e ho bisogno di vedere con quale file in /dev/ filesystem questo dispositivo è stato collegato, per poter comunicare con esso. Sfortunatamente non ci sono file appena creati in /dev/ né può essere visto nulla in dmesg produzione. Quindi questa sembra essere una domanda difficile.

Sfondo:

Non avevo mai lavorato con un dispositivo seriale, quindi ieri, quando è apparso un bisogno, ho provato a cercarlo su Google ma non ho trovato nulla di utile. Ho passato alcune ore a cercare e voglio condividere una risposta trovata in quanto potrebbe essere utile per qualcuno.

Risposta accettata:

Sfortunatamente le porte seriali non sono PlugNPlay, quindi il kernel non sa quale dispositivo è stato collegato. Dopo aver letto un HowTo tutorial Ho l'idea di lavoro.

Il /dev/ directory di unix come i sistemi operativi contiene file denominati ttySn (con n come numero) . La maggior parte di essi non corrisponde a dispositivi esistenti. Per scoprire quali lo fanno, emetti un comando:

$ dmesg | grep ttyS
[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[    0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

Sopra è un esempio di output del mio PC. Puoi vedere l'inizializzazione di alcune porte seriali:

ttyS0 , ttyS1 , ttyS4 , ttyS5 .

Uno di questi avrà una tensione positiva su un dispositivo collegato. Quindi confrontando il contenuto del file /proc/tty/driver/serial con e senza il dispositivo collegato possiamo facilmente trovare il ttyS relativi al nostro dispositivo. Quindi, ora fai:

$ sudo cat /proc/tty/driver/serial> /tmp/1

(s)collega un dispositivo

$ sudo cat /proc/tty/driver/serial> /tmp/2

Quindi controlla la differenza tra i due file. Di seguito è riportato un output del mio PC:

$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR

Confrontando i tre numeri con l'output di dmesg possiamo determinare quale è la porta:

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Quindi, il nostro dispositivo è /dev/ttyS0 , missione compiuta!


Linux
  1. Come usare TROVA in Linux

  2. Come controllare quale fuso orario in Linux?

  3. come utilizzare netstat su una porta specifica in Linux

  4. Come posso monitorare il traffico della porta seriale?

  5. Come trovare quale versione di Java nella cartella installata di Java?

Come utilizzare il port forwarding SSH

Come trovare il numero di porta di un servizio in Linux

Come trovare quale servizio è in ascolto su una porta particolare

Come utilizzare il comando which in Linux

Cosa significano i dispositivi ALSA come hw:0,0? Come faccio a capire quale usare?

Come faccio a sapere quale /dev/ttyS* è la mia porta seriale?