Я столкнулся с точно такой же проблемой, пытаясь подключиться к последовательному устройству на скорости 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 будет такой болезненной?