Ho riscontrato lo stesso identico problema nel tentativo di connettermi a un dispositivo seriale a 115200 baud. Sto eseguendo 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
Dopo alcuni scavi ho trovato questo:
sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo
o questo:
sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,inlcr,onlret,echo
Tuttavia, come hai sottolineato, quando viene eseguito il comando screen, l'attributo echo della porta seriale selezionata (in questo caso / dev / ttyS0) ritorna a
-echo
Questo può essere verificato dal comando
sudo stty -F /dev/ttyS0 -a
In una finestra terminale separata.
Inoltre, ho scoperto che staccando dalle sessioni dello schermo usando
ctrl-A d
è una cattiva idea perché non è possibile ricollegarsi. Diamo un'occhiata a una tipica invocazione:
[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 ~]$
Quindi la sessione dello schermo da cui ci siamo staccati è ancora in esecuzione, ma screen -ls mostra NADA. Mentre la sessione schermo collegata a / dev / ttyS0 è ancora attiva, diamo un'occhiata allo stato dell'eco (che era impostato su attivo sopra). Se ora controlliamo lo stato di / dev / ttyS0 vediamo che l'eco è stato disattivato:
[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 infine, provando altre alternative per ricollegare:
[iceman@localhost ~]$ screen -x
There is no screen to be attached.
[iceman@localhost ~]$ screen -r
There is no screen to be resumed.
[iceman@localhost ~]$
Questo può essere la fonte di molto tempo sprecato poiché una ricerca di processo per "schermo" minuscolo non farà apparire nulla!
IMPORTANTE: se sulla stessa porta seriale sono presenti più schermate, i tentativi di determinare cosa sta succedendo avranno risultati casuali, a seconda di quale processo "intercetta" l'interruzione della porta seriale.
Come hai detto Pak, l'opzione echo sullo schermo, per qualsiasi motivo, non viene passata a stty e infatti, indipendentemente dal fatto che tu usi -echo o echo, stty imposta a -echo quando viene chiamata dallo schermo usando / dev / ttyS0 come porta seriale specificata. (Ho confermato questo)
Ho trovato una soluzione usando minicom come segue:
sudo minicom -s
Quindi impostare la porta seriale nel menu della porta seriale come segue:
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
Quindi salva come "ser1" e usa il comando:
sudo minicom ser1
Questo avvierà Minicom, che puoi quindi usare:
ctrl-A E
per attivare l'eco locale e
ctrl-A A
per aggiungere un linefeed ad ascii CR terminato che arriva alla porta seriale.
Minicom riporta la sua versione come:
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jun 6 2007, 06:02:15.
Spero che questo aiuti e salvi almeno un'altra persona un po 'di tempo e fatica. Chi avrebbe mai pensato che configurare l'equivalente di HyperTerm in Linux sarebbe stato così doloroso?