GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo encontrar qué puerto serie está en uso?

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!


Linux
  1. Cómo usar el comando Grep para buscar texto en archivos

  2. ¿Cómo usar `cuál` en un comando con alias?

  3. ¿Cómo encontrar el módulo del kernel para un dispositivo dado?

  4. Linux:¿cómo encontrar procesos usando el puerto serie?

  5. ¿Cómo usar Chromecast?

Cómo usar BUSCAR en Linux

Cómo utilizar el reenvío de puertos SSH

Cómo encontrar el número de puerto de un servicio en Linux

Cómo encontrar qué servicio está escuchando en un puerto en particular

Cómo usar el comando find de Linux para buscar archivos

Cómo usar el comando which en Linux