2012-06-25 19 views
9

Tengo un problema interesante. Estoy trabajando en una caja integrada con varias instancias de Linux ejecutando cada una en un procesador ARM. Están conectados a través de una red interna de 1GBps. Tengo un nodo de dispositivo de puerto serie conectado al procesador A (digamos Linux-A ejecutándose en él). Tengo un programa que se ejecuta en el procesador B (digamos en Linux-B) para acceder al dispositivo del puerto serie como si estuviera conectado a Linux-B localmente.
Mi programa invoca llamadas de API de tipo i/o en el nodo del dispositivo para controlar tty echo, entrada de modo de caracteres. Lo que me pregunto es si hay una manera de crear un dispositivo serial virtual que esté disponible en Linux-B de alguna manera hablando con un dispositivo serial real en Linux-A sobre una red interna.
¿Cómo se crea un dispositivo virtual io en Linux que transmite datos a un dispositivo real?

Estoy pensando en algo así como: Linux-B tiene/dev/ttyvirtual. Todo lo que se escribe en él se transporta a través de un socket de red a Linux-A serialserver. El servidor serie exlige las llamadas de API en dispositivos reales, digamos/dev/ttys0. Todos los datos en espera en ttys0 se transportan a/dev/ttyvirtual.

¿Cuáles son todas las cosas involucradas para hacer esto rápido?

Gracias
Videoguy

Actualización: he encontrado una discusión en http://fixunix.com/bsd/261068-network-socket-serial-port-question.html con grandes punteros.
Otro enlace útil es http://blog.philippklaus.de/2011/08/make-rs232-serial-devices-accessible-via-ethernet/

+0

diagrama sería útil;) – Merlin

Respuesta

7

Terminé usando socat

ejemplos se pueden encontrar aquí: socat examples

Usted Socat espalda con espalda en ambas máquinas. Uno escucha en un puerto tcp y reenvía datos al puerto virtual local o pty. El socat en otra caja usa un dispositivo real como entrada y reenvía cualquier dato al puerto tcp.

8

Tome un vistazo a openpty(3). Esto le permite crear un pseudo-TTY (como /dev/pts/0, el tipo que usan las conexiones ssh), que responderá como lo haría un TTY normal, pero le dará control programático directo sobre las conexiones.

De esta forma puede alojar un dispositivo en serie (por ejemplo, /dev/pts/5) que reenvía datos entre una conexión de red y luego otras aplicaciones pueden realizar operaciones seriales sin conocer el puente de red subyacente.

Cuestiones relacionadas