Eco locale che utilizza Schermo per connettersi a un terminale seriale


7

Leggendo il libro "Costruire reti di sensori wireless" ho appreso che è possibile utilizzare l'utilità Schermo per collegarsi a una console seriale. Ho provato a usarlo per connettermi a un modulo XBee e sembrava funzionare bene, tranne per il fatto che non faceva eco ai caratteri digitati localmente nel terminale. L'unica cosa che ho trovato finora che sembrava potesse aiutare era usare l'utilità stty per impostare l'opzione "echo" sul dispositivo tty, ma la modifica non sembra avere effetto. Ho corso stty sul dispositivo tty e gli ho passato "eco". Se corro di nuovo stty per stampare le opzioni correnti, mostra ancora che è impostato "-echo". Se la mia comprensione della sintassi è corretta, il trattino indica che l'opzione è disattivata e nessun trattino significa che è attiva. Ho anche provato a impostare l'opzione echo con sudo, ma non

Chiaramente non sono molto ben informato in questo settore, quindi qualsiasi aiuto sarebbe molto apprezzato.

Risposte:


6

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?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.