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!