Como eu uso o jpnevulator para capturar e registrar o tráfego serial entre uma aplicação e uma porta serial de hardware?

1

OK, estive pesquisando por horas, então obviamente não consegui entender as respostas para as várias perguntas que já foram feitas sobre esse assunto. Espero que, fazendo novamente a pergunta de uma maneira mais específica, eu possa obter uma resposta que eu possa entender.

Eu tenho algum aplicativo em execução no linux que se comunica com um dispositivo externo conectado a uma porta serial. Eu quero ser capaz de capturar e registrar os dados enviados em ambas as direções entre o aplicativo e o dispositivo, com registros de data e hora no início de cada linha no arquivo.

Como um caso de teste, estou usando o minicom como o aplicativo que quero monitorar, conectado por meio de um cabo de modem nulo a outro computador que também executa o minicom. Eu já confirmei que, se eu digitar caracteres em qualquer um dos computadores, os caracteres aparecerão no terminal do outro computador. Até agora tudo bem.

Eu então encontrei esta pergunta:

Como posso monitorar o tráfego da porta serial?

Na resposta a esta pergunta, o programa jpnevulator é sugerido. No entanto, ao revisar a man page, não consegui descobrir o jeito certo de usar o jpnevulator para conseguir o que eu quero. Aqui está o que eu tentei fazer:

Primeiro, abri uma janela de terminal e digitei o seguinte comando:

$jpnevulator --tty=/dev/ttyS0 --pty --pass --read --ascii --timing-print --file=serial.log

Eu vi a saída:     jpnevulator: o dispositivo slave pts é / dev / pts / 18

Em seguida, abri outra janela de terminal e digitei o seguinte comando:

minicom -D/dev/pts/18 -b115200

Minicom aberto sem reclamação.

No entanto, quando eu digitei caracteres em um dos terminais (local e remoto), nada apareceu em nenhum terminal. O jpnevulator registrou apenas os dados gravados em / dev / pts / 18.

Minha expectativa é que o jpnevulator:

  1. lê os dados de / dev / pts / 18 e "passa" esses dados para / dev / ttyS0 enquanto grava esses dados no arquivo especificado.

  2. lê os dados de / dev / ttyS0 e "passa" esses dados para / dev / pts / 18 enquanto também grava esses dados no arquivo especificado.

Estou ciente da observação no faq que diz "O Jpnevulator nunca foi construído para se sentar entre o kernel e sua aplicação. Sinto muito."

No entanto, os mesmos estados de faq no segundo parágrafo abaixo: "Agora com um pouco de sorte, uma boa notícia: Um pouco atrás, Eric Shattow sugeriu usar dispositivos pseudo-terminais para se sentar entre o kernel e sua aplicação. " Essa é a abordagem que estou tentando fazer, mas não estou tendo sucesso. O que estou perdendo?

Obrigado a todos antecipadamente.

Felicidades, Allan

p.s. Consegui capturar com êxito o tráfego de ida e volta usando o método socat mencionado na pergunta existente da qual fiz referência, mas esse método não oferecia nenhuma maneira de marcar o tempo do tráfego. Eu estava esperando que o jpnevulator tivesse fornecido isso para mim.

    
por AWM 29.10.2018 / 22:00

1 resposta

0

Respondi à minha própria pergunta: encontrei outro utilitário que fornece melhor o que eu quero:

link

Esse pacote inclui um script perl que pós-processa a saída da interceptação para fornecer uma saída "bonita". Eu achei muito fácil modificar o script para adicionar um timestamp a cada linha.

Obrigado a Geoff Meyers por fornecer isso.

Allan

    
por 30.10.2018 / 21:22