2012-10-04 29 views
7

Voy a escribir un programa en C que va a abrir una conexión a través del puerto serie, y "escuchar" los comandos entrantes, luego tomará alguna medida e informará un estado.¿Cómo sé qué puerto serie usar en Linux?

La conexión va a ser más de RS232 (puerto serie) y estoy tratando de entender cómo saber qué puerto abrir.

Al usar Windows, si conecto mi dispositivo usb-serial, veo "Prolific USB-to-Serial Comm Port (COM4)" aparece en el administrador de dispositivos ... pero en el lado de Linux no lo hago vea cualquier cambio en el área /sys/class/tty o /dev, veo ttyS0 a través de ttyS7 presente todo el tiempo (supongo que el S significa serie basado en what I've read).

Entonces, ¿cómo sé a cuál debo conectarme?

EDITAR
Mientras estoy desarrollar esto en una caja de OpenSUSE 12.1 (3.1 kernel), el programa final se llevará a cabo en uCLinux en un tablero de usar un kernel 2.4Linux, por lo que estoy buscando C soluciones puras que trabajarán en los núcleos antiguos

FYI: el sistema de archivos /sys como se señala en la respuesta a this post no existía hasta que el kernel 2.6 y mis limitaciones me obligan a pegarse a las cosas disponibles en el kernel 2.4.

+1

Es probable que su adaptador de puerto serie USB aparezca como '/ dev/ttyUSB0 '. También consulte [esta pregunta] (http://stackoverflow.com/questions/2530096/) si necesita una forma de enumerar los puertos serie. –

+0

pyserial podría ser de ayuda aquí. – Prasanth

+0

@PhilippeGauthier - Eso sería muy desafortunado teniendo en cuenta que no sabré si el usuario va a utilizar un cable serie usb-> o un cable serial recto. :( – Mike

Respuesta

3

El comando dmesg le mostrará el mensaje del kernel cuando el módulo está enchufado, lo que le dará el nombre de su dispositivo.

El sistema de archivos /proc es como el administrador de dispositivos en las ventanas - en algún lugar habrá una lista de dispositivos TTY

+1

Parece que leer el dmesg funcionará bien:' [827.528859] usb 2-2: convertidor pl2303 ahora conectado a ttyUSB0' Para que pueda ver mi dispositivo en/dev/ttyUSB0, ¡gracias! – Mike

1

Dos cosas que he usado: (a) buscar líneas de control (DTR, DSR, etc.) y (b) abrir 'todos' los puertos y descubrir cuál (es) parecen estar activos. En este último caso, ayuda si puede enviar un mensaje al dispositivo serie y hacer que responda; esto obviamente solo funciona si el dispositivo responderá a un mensaje.

0

Salida /proc/tty/driver/serial - debería ver un UART como 16550A en lugar de unknown y rx debe ser> 0 para puertos existentes. Si debe adivinar qué puerto se utilizará, abra todos los puertos disponibles. Después de eso, debe configurar el puerto según sus necesidades (velocidad en baudios, paridad, bits, etc.) o tratar de adivinar la velocidad de transferencia entrante, etc.

+1

Y también compruebe '/ proc/tty/driver/usbserial'. – sawdust

Cuestiones relacionadas