Eu encontrei o mesmo problema tentando conectar-me a um dispositivo serial a 115200 bauds. Estou executando o RHEL V5.
uname -a
Dá:
Linux localhost.localdomain 2.6.32-100.0.19.el5
#1 SMP Fri Sep 17 17:51:41 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
Depois de algumas escavações, encontrei isto:
sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
ou isto:
sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,inlcr,onlret,echo
No entanto, como você apontou, quando o comando screen é executado, o atributo echo da porta serial selecionada (neste caso / dev / ttyS0) é revertido para
-echo
Isso pode ser verificado pelo comando
sudo stty -F /dev/ttyS0 -a
Em uma janela de terminal separada.
Além disso, descobri que desanexar das sessões de tela usando
ctrl-A d
é uma má ideia porque não é possível anexar novamente. Vamos dar uma olhada em uma invocação típica ::
[iceman@localhost ~]$ sudo stty -F /dev/ttyS0 echo
[iceman@localhost ~]$ sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
[detached]
[iceman@localhost ~]$ ps aux | grep SCREEN
root 3779 0.0 0.1 78476 2876 ? Ss 11:05 0:00 SCREEN /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
iceman 3781 0.0 0.0 61152 740 pts/6 S+ 11:05 0:00 grep SCREEN
[iceman@localhost ~]$ screen -ls
No Sockets found in /var/run/screen/S-iceman.
[iceman@localhost ~]$
Portanto, a sessão de tela da qual nós nos desconectamos ainda está em execução, mas a tela -ls mostra o NADA. Enquanto a sessão de tela anexada a / dev / ttyS0 ainda estiver ativa, vamos dar uma olhada no estado do eco (que foi configurado como ativo acima). Se agora verificarmos o status de / dev / ttyS0, veremos que o eco foi desativado:
[iceman@localhost ~]$ sudo stty -F /dev/ttyS0 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts -cdtrdsr
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
[iceman@localhost ~]$
e, finalmente, tentando outras alternativas para anexar novamente:
[iceman@localhost ~]$ screen -x
There is no screen to be attached.
[iceman@localhost ~]$ screen -r
There is no screen to be resumed.
[iceman@localhost ~]$
Esta pode ser a fonte de muito tempo desperdiçado, pois uma pesquisa de processo por "tela" minúscula não resultará em nada!
IMPORTANTE: Se houver várias sessões de tela na mesma porta serial, as tentativas de determinar o que está acontecendo terão resultados aleatórios, dependendo de qual processo "captura" a interrupção da porta serial.
Como você disse, a opção echo na tela, por qualquer motivo, não está sendo passada para stty e, de fato, independentemente de você usar -echo ou echo, stty define -echo quando chamado pela tela usando / dev / ttyS0 como a porta serial especificada. (Eu confirmei isso)
Eu encontrei uma solução usando minicom da seguinte forma:
sudo minicom -s
Em seguida, configure a porta serial no menu da porta serial da seguinte forma:
A - Serial Device : /dev/ttyS0
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
Em seguida, salve como "ser1" e use o comando:
sudo minicom ser1
Isso iniciará o minicom, que você poderá usar:
ctrl-A E
para ativar o eco local e
ctrl-A A
para acrescentar um avanço de linha a ascii com terminação CR chegando à porta serial.
Minicom reporta sua versão como:
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jun 6 2007, 06:02:15.
Espero que isso ajude e poupe pelo menos uma outra pessoa de algum tempo e esforço. Quem teria pensado que configurar o equivalente do HyperTerm no Linux seria tão doloroso?