Como eu uso uma porta serial no Linux como um pipe ou netcat?

3

Eu tenho dois computadores com duas portas seriais: ttyS0 e ttyUSB0. (Na verdade, eles estão no mesmo computador, mas isso é apenas para testes). As portas estão conectadas via cabo de modem nulo. Eu quero ser capaz de simplesmente enviar bytes em uma extremidade e sair do outro lado, e vice-versa. Por que o trabalho abaixo não funciona?:

# set both serial ports to 9600 8n1
# '-parenb' means no parity,
# '-cstopb' means 1 stop bit
# cs8 means 8 bits at a time 
stty -F /dev/ttyUSB0 cs8 -cstopb -parenb 9600
stty -F /dev/ttyS0 cs8 -cstopb -parenb 9600

# in one terminal:
echo "asdf" > /dev/ttyUSB0

# in another terminal, this hangs and does nothing
cat < /dev/ttyS0

Eu posso fazer coisas semelhantes com netcat e canos muito facilmente (abaixo), então eu sinto que algo como o acima deve ser possível também.

mkfifo mypipe

# in one terminal
cat < mypipe

# in another. works as expected
echo "asdf" > mypipe
    
por user3243135 19.10.2013 / 06:34

1 resposta

5

Why doesn't the below work?

# in one terminal:
echo "asdf" > /dev/ttyUSB0

# in another terminal, this hangs and does nothing
cat < /dev/ttyS0

Como, via de regra, as portas seriais não armazenam dados em buffer. Se não houver um aplicativo cliente para receber os bytes de destino na porta serial, eles serão simplesmente descartados.

Como experiência, tente lançar minicom ou cu ou outro programa de terminal serial no computador de destino, depois execute o comando echo novamente no computador de transmissão. Assumindo que a taxa de transmissão e os enquadramentos estejam alinhados, você deverá ver "asdf" no destino.

    
por 19.10.2013 / 10:33