¿Cómo sé cuál / dev / ttyS * es mi puerto serie?

33

Tengo una computadora portátil que solo tiene un puerto serie.

Entré en:

/dev 

directorio, y encontré:

ttyS0
ttyS1
ttyS2
ttyS3

¿Cómo sé cuál de esos "ttyS" se refiere a mi puerto serie?

sivabudh
fuente
stackoverflow.com/questions/2530096/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

32

Creo que es este comando:

dmesg | grep tty

Ejecutar eso en mi propia caja de Linux (que solo tiene 1 puerto serie) produce una sola línea de salida ttyS0. Pruébelo usted mismo, verá lo que quiero decir.

sivabudh
fuente
¿Significa eso que después de ejecutar ese comando, si la respuesta es ... consola [tty0] habilitada ..., y ningún otro dispositivo está conectado a / dev / tty0 (perdón por la aparente tontería de la pregunta)?
Hektor
1
El único problema es que la salida de dmesg se puede borrar, por lo que si ejecuta esto demasiado tarde, no tiene suerte. Mirar / proc / tty / driver / serial parece la respuesta más sólida y luego verifica si hay interrupciones de rx que aumentan en el recuento a medida que escribes datos en ese puerto
Neil McGill
Lo siento, ¿qué debo hacer si no veo ningún resultado?
user3019105
Si actualmente se encuentra en un terminal sobre dicha línea serie, puede escribir ttypara obtener el nombre de su tty. Supongo que eso es lo que OP quiso decir, ya que no plantearon la pregunta como "¿qué puerto (s) serie (s) se están gettyejecutando?"
Thom Nichols
14

Vea qué UART se detectaron en /proc/tty/driver/serial. Una línea con uart:unknownmedios: nada detectado (y probablemente no existente).

# cat /proc/tty/driver/serial 
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:16550A port:000002F8 irq:3 tx:111780 rx:1321 RTS|DTR|DSR
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3

Si algo está conectado y maneja las líneas CTS, DSR o CD (estas son líneas de entrada), incluso puede estar bastante seguro de que realmente hay algo ... Lo mismo es cierto para el conteo de bytes de rx.

Robert Siemer
fuente
7

Si necesita hacer esto, leer la salida de dmesg mediante programación puede ser problemático, en su lugar, la carpeta / dev / serial / by-id tiene enlaces simbólicos que llevan el nombre de los datos identificables de su dispositivo y apuntan al / dev / tty * específico están conectados a

No estoy seguro de si esta es una regla especial de udev que es específica de la distribución, pero funciona bien en Ubuntu, avíseme si funciona.

santileortiz
fuente
5

ttyS0through 3corresponde a COM1through 4, respectivamente. Usualmente tienen los mismos recursos de hardware y no siempre son detectables, por lo que siempre existen.

Ignacio Vazquez-Abrams
fuente
gracias por la respuesta. Digamos que quiero decirle a Linux que quiero que ttyS0 se asigne al hardware de mi puerto serie, ¿qué debo hacer?
sivabudh
Lo usaría setserialpara asignar los recursos que ttyS0 usa a los de su puerto serie. linux.die.net/man/8/setserial Sin embargo, esto normalmente no es necesario, ya que cualquier cosa más allá de COM4 generalmente tiene suficiente hardware auxiliar para permitir que Linux lo detecte y agregue un dispositivo en serie según corresponda.
Ignacio Vazquez-Abrams
0

También existe el comando setserialque utiliza /proc/tty/driver/serialpara obtener sus datos.

# setserial -g /dev/ttyS[0123]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
Daniël W. Crompton
fuente