7

Прочитав книгу "Построение беспроводных сенсорных сетей", я узнал, что вы можете использовать утилиту Screen для подключения к последовательной консоли. Я попытался использовать его для подключения к модулю XBee, и он, кажется, работал нормально, за исключением того, что он не отображал локально напечатанные символы в терминале. Единственное, что я обнаружил до сих пор, казалось, что это может помочь, - это использовать утилиту stty для установки опции "echo" на устройстве tty, но, похоже, изменение не вступает в силу. Я запустил stty на устройстве tty и передал его "эхо". Если я снова запускаю stty, чтобы распечатать текущие параметры, он все равно показывает, что установлен «-echo». Если мое понимание синтаксиса правильное, черточка указывает, что опция выключена, а ни одна черта не означает, что она включена. Я также попытался установить параметр echo с помощью sudo, но это тоже не имело никакого значения.

Я явно не очень хорошо осведомлен в этой области, поэтому любая помощь будет принята с благодарностью.

1 ответ1

5

Я столкнулся с точно такой же проблемой, пытаясь подключиться к последовательному устройству на скорости 115200 бод. Я бегу RHEL V5.

uname -a

дает:

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

После некоторых копаний я нашел это:

sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,echo

или это:

sudo screen /dev/ttyS0 115200,cs8,-parenb,-cstopb,inlcr,onlret,echo

Однако, как вы указали, при выполнении экранной команды атрибут echo выбранного последовательного порта (в данном случае /dev /ttyS0) возвращается к

-echo  

Это можно проверить командой

sudo stty -F /dev/ttyS0 -a

В отдельном окне терминала.

Кроме того, я обнаружил, что отсоединение от сеансов экрана с помощью

ctrl-A d

это плохая идея, потому что вы не можете повторно присоединить. Давайте посмотрим на типичный вызов:

[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 ~]$ 

Таким образом, сеанс экрана, от которого мы отсоединились, все еще продолжается, но screen -ls показывает NADA. Пока сеанс экрана, прикрепленный к /dev /ttyS0, все еще работает, давайте посмотрим на состояние эха (которое было установлено на активный выше). Если мы теперь проверим состояние /dev /ttyS0, то увидим, что эхо отключено:

[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 ~]$ 

и, наконец, попробуйте другие варианты, чтобы повторно присоединить:

[iceman@localhost ~]$ screen -x
There is no screen to be attached.
[iceman@localhost ~]$ screen -r
There is no screen to be resumed.
[iceman@localhost ~]$ 

Это может быть источником большого количества потерянного времени, так как процесс поиска "строчных букв" в нижнем регистре ничего не даст!

ВАЖНО: Если на одном последовательном порту несколько сеансов экрана, попытки определить, что происходит, будут иметь случайные результаты, в зависимости от того, какой процесс "ловит" прерывание последовательного порта.

Как вы сказали, Pak, опция echo на экране по какой-либо причине не передается в stty, и фактически, независимо от того, используете ли вы -echo или echo, stty устанавливает -echo при вызове экраном с помощью /dev /ttyS0 в качестве указанного последовательного порта. (Я это подтвердил)

Я нашел решение с помощью minicom следующим образом:

sudo minicom -s

Затем настройте последовательный порт в меню последовательного порта следующим образом:

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

Затем сохраните как "ser1" и используйте команду:

sudo minicom ser1

Это запустит Minicom, который вы можете использовать:

ctrl-A E

включить местное эхо и

ctrl-A A

добавить перевод строки в CR, завершенный ascii, поступающий в последовательный порт.

Minicom сообщает о своей версии как:

Welcome to minicom 2.1  

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n      
Compiled on Jun  6 2007, 06:02:15.

Надеюсь, это поможет и сэкономит хотя бы одному человеку время и силы. Кто бы мог подумать, что установка эквивалента HyperTerm в Linux будет такой болезненной?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .