La pregunta:
Conecté un dispositivo (es decir, un módem GSM) a través de un puerto serie (también conocido como RS-232), y necesito ver con qué archivo en /dev/
sistema de archivos este dispositivo estaba atado, para poder comunicarse con él. Desafortunadamente, no hay un archivo recién creado en /dev/
ni se ve nada en dmesg
producción. Así que esta parece ser una pregunta difícil.
Antecedentes:
Nunca había trabajado con un dispositivo serie, así que ayer, cuando apareció la necesidad, intenté buscarlo en Google pero no pude encontrar nada útil. Pasé algunas horas buscando y quiero compartir una respuesta que encontré, ya que podría ser útil para alguien.
Respuesta aceptada:
Lamentablemente, los puertos serie no son PlugNPlay, por lo que el kernel no sabe qué dispositivo se conectó. Después de leer un HowTo tutorial Tengo la idea funcional.
El /dev/
El directorio de sistemas operativos similares a Unix contiene archivos denominados como ttySn (siendo n un número) . La mayoría de ellos no corresponde a los dispositivos existentes. Para encontrar cuáles lo hacen, emita 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
Arriba hay un ejemplo de salida de mi PC. Puede ver la inicialización de algunos puertos serie:
ttyS0
, ttyS1
, ttyS4
, ttyS5
.
Uno de ellos tendrá un voltaje positivo en un dispositivo conectado. Entonces, al comparar el contenido del archivo /proc/tty/driver/serial
con y sin el dispositivo enchufado podemos encontrar fácilmente el ttyS relacionados con nuestro dispositivo. Entonces, ahora haz:
$ sudo cat /proc/tty/driver/serial> /tmp/1
(des)conectar un dispositivo
$ sudo cat /proc/tty/driver/serial> /tmp/2
A continuación, compruebe la diferencia entre los dos archivos. A continuación se muestra una salida de mi 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
Comparando los tres números con la salida dmesg podemos determinar cuál es el puerto:
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Por lo tanto, nuestro dispositivo es /dev/ttyS0
, ¡misión cumplida!