Como evitar que octal dump (od) retorne?

1

Estou tentando ler alguma saída de /dev/ttyUSB0 , usando od no Ubuntu. Então eu usei este comando:

od -x --endian=big < /dev/ttyUSB0

Quando eu usei ontem, ele não estava bloqueando e apenas mostrava coisas sem fugir ou retornar assim:

0000000 55aa 03ff 0104 0616 835a a555 aaff 0302
0000020 1104 e0e1 025a a555 aa03 ff01 0506 8682 ...

Mas quando eu uso hoje, od para e retorna logo após a impressão:

0000000

Alguém pode saber o que eu estou sentindo falta aqui?

    
por user206420 20.12.2016 / 15:59

1 resposta

2

Possivelmente, o dispositivo tty esteja no modo canônico (aquele em que a disciplina de linha tty implementa um editor de linha simples), portanto, um caractere eof ( ^D por padrão) recebido da outra extremidade causa read() não devolva nada.

Isso seria o mesmo de quando você executa

od -vx --endian=big 

em um terminal e digite Ctrl-D .

Outra explicação seria que o modo canônico está desativado, mas a configuração VMIN termios está configurada como 0. Com VMIN = 0, um read() no arquivo do dispositivo retorna o que estiver lá, pronto para ser lido, se houver qualquer linha reta ausente e nada de outra forma (significando fim de arquivo) (a menos que VTIME > 0, nesse caso, ele espera até VTIME deciseconds por pelo menos um byte).

Novamente, você pode tentar em um terminal com:

s=$(stty -g); stty -icanon min 0 time 0; od -vx --endian=big; stty "$s"

Verifique as configurações atuais com:

stty -a < /dev/ttyUSB0

Se esse /dev/ttyUSB0 for um dispositivo serial que deve ser usado apenas para transferir dados e não para ser usado como um terminal, você deve emitir um

stty raw -echo < /dev/ttyUSB0

Na verdade, isso desativa a maioria dos efeitos da disciplina de linha tty.

Veja Quais são as responsabilidades de cada componente Pseudo-Terminal (PTY) (software, lado mestre, lado escravo)? e as suas páginas termios(3) e stty(1) man para mais informações.

    
por 20.12.2016 / 16:57