Это - Linux Serial HOWTO. В нем приведена информация о последовательных портах, которая не описана в других HOWTO'S. Это - информация об установке модема под Linux, некоторые советы по последовательным устройствам и советы по поиску неисправностей.
Существует другой HOWTO для терминалов (см. ``Относящиеся HOWTO'S "). Этот HOWTO относится к Linux для платформы Intel x86, хотя может подойти и для других архитектур.
Авторские права (c) 1993 - 1997 принадлежат Greg Hankins, а в 1998 - David Lawyer. Этот документ может распространяться под условиями, изложенными в лицензии LDP на http://sunsite.unc.edu/LDP/COPYRIGHT.html. Этот документ не может распространяться в измененной форме без согласия автора.
Я, David Lawyer, являюсь новым ведущим (Greg Hankins был первоначальным автором и ведущим). Внесено мало изменений, и я не проверил много чего, чтобы увидеть, является ли оно современным. Для этого надо проделать много работы. Сообщите мне, что неправильно или отсутствует. В будущем, я может быть разделю этот Howto: 1. Информация о терминалах в Text-Terminal-HOWTO. 2. Информация о модемах в новом Howto: ModemHOWTO. 3. Информация о последовательных портах, добавленная к этому Howto. Таким образом ищите новые версии в августе или сентябре 1998.
Новые версии Serial HOWTO будут доступны на ftp://sunsite.unc.edu:/pub/Linux/docs/HOWTO/Serial-HOWTO и зеркалах. Имеются другие форматы, типа Postscript и DVI в каталоге other-formats. Serial HOWTO также доступен на http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html и будет помещаться в comp.os.linux.answers ежемесячно.
Пожалуйста присылайте мне любые вопросы, комментарии, предложения или дополнительный материал. Я всегда рад услышать, что вы думаете об этом HOWTO. Также я всегда готов к разъяснениям! Сообщите мне точно, что вы не понимаете, или что могло бы быть более ясным. Вы можете найти меня по адресу bf347@lafn.org (David Lawyer).
Ваш mileage может измениться. Данные ответы не могут работать для всех систем и всех комбинаций установок.
Linux, насколько известно, работает со следующими последовательными аппаратными устройствами.
Большинство модемов сегодня - PnP, и большинство из них будет (после некоторых усилий) работать с Linux. Самое лучшие из них - те, которые имеют перемычки для отключения PnP.
Во многих случаях, если вы просто устанавливаете перемычки для некоторых значений COM и IRQ, PnP отключится. Вы можете также захотеть отключить PnP в BIOS вашего компьютера. Если вы не можете отключить PnP, тогда попробуйте вот что:
Они также называются "последовательные адаптеры".
* = > "setserial" показывает подробности конфигурирования
Обратите внимание: BB-1004 и BB-1008 не поддерживают сигналы DCD и RI, и таким образом не пригодны для использования в качестве модемов, обслуживающих входящие звонки. В остальном они прекрасно будут работать.
Удостоверьтесь, что совместимый с Linux драйвер доступен. Этот список слегка устарел.
Модемы, помеченные ``Winmodems", например USR Sportster Winmodem и IBM Aptiva MWAVE, не поддерживаются в Linux. Эти модемы используют частные разработки, которые требуют специальных драйверов Windows.
Избегайте модемов этих типов.
Модемы, которые требуют драйверы Rockwell RPI, пригодны для использования не полностью, так как программное обеспечение драйвера не работает под Linux. RPI делает сжатие и исправление ошибки, используя программное обеспечение MS на CPU вашего компьютера. Если вы желаете эксплуатировать модем без использования RPI (и таким образом обходиться без сжатия и исправления ошибок), то вы можете легко отключить RPI, послав в модем (в виде строки инициализации) команду отключения RPI: +H0
Порт ввода-вывода - это способ передать данные в/из компьютера. Имеются множество типов портов ввода-вывода типа последовательных портов, параллельных портов, контроллеров дисковода, плат локальной сети ethernet и т.д. Мы будем иметь дело с последовательными портами, так как модемы и терминалы - последовательные устройства. Каждый последовательный порт должен иметь адрес ввода-вывода и прерывание (IRQ). Имеются четыре последовательных порта, соответствующие COM1 - COM4:
ttyS0 (COM1) address 0x3f8 IRQ 4
ttyS1 (COM2) address 0x2f8 IRQ 3
ttyS2 (COM3) address 0x3e8 IRQ 4
ttyS3 (COM4) address 0x2e8 IRQ 3
Если Linux не обнаруживает последовательные порты при загрузке, то
удостоверьтесь, что поддержка последовательных устройств разрешена и
вкомпилирована в ядро. В этом документе, я обращаюсь к COM1 как ttyS0, COM2
как ttyS1, COM3 как ttyS2, и COM4 как ttyS3. Обратите внимание, что по
умолчанию эти устройства имеют перекрывающиеся IRQ. Вы не можете использовать
все порты с этими значениями по умолчанию, и вы должны переназначить другие
IRQ. См. раздел ``Я могу использовать более, чем два последовательных
устройства?" при установке IRQ.
На некоторых инсталляциях, будут созданы два дополнительных устройства, /dev/modem для вашего модема и /dev/mouse для вашей мыши. Оба из них - символические связи с соответствующими устройствами в /dev, которые вы определили при установке (если у вас bus mouse, то /dev/mouse укажет на устройство bus mouse).
В отношении /dev/mouse и /dev/modem ведутся споры. Я строго против использования этих связей. В частности, если вы планируете использовать ваш модем для приема входящих звонков, то вы можете столкнуться с проблемами, потому что файлы блокировки не могут работать правильно, если вы используете /dev/modem. Используйте эту связь, если это вам нравится, но удостоверьтесь, что она указывает на правильное устройство. Однако, если вы измените или удалите эту связь, то некоторые приложения (minicom, например) могу потребовать перенастройки.
Каждое устройство ttyS имеет соответствующее устройство cua. Велись некоторые разговоры об отмене cua, так что возможно самое лучшее - это использовать ttyS. Основное различие между cua и ttyS - то, что для обычной команды "open" (без каких-либо флажков) в прикладной программе, cua откроет порт, даже если сигналы управления модема (типа DCD) просят этого не делать.
(Чтобы проверить сигналы управления модема должен быть установлен stty.) Порт ttyS отказался бы открываться в этом случае, но его можно принудительно открыть, задавая некоторые флажки в команде "open".
Таким образом порт ttyS может делать все, что может порт cua. За исключением того, что результаты "принудительного" открытия in read statements in the program работают по-другому, но программисты могут обойти это, изменяя свои программы. Удаление cua привело бы Linux в большее соответствие с Posix стандартом и решило бы некоторые проблемы с файлами блокировки.
/dev/ttyS0 major 4, minor 64 /dev/cua0 major 5, minor 64
/dev/ttyS1 major 4, minor 65 /dev/cua1 major 5, minor 65
/dev/ttyS2 major 4, minor 66 /dev/cua2 major 5, minor 66
/dev/ttyS3 major 4, minor 67 /dev/cua3 major 5, minor 67
Обратите внимание, что все дистрибутивы должны приходить с этими устройствами,
уже правильно установленными (если cua не отменен). Вы можете проверить это,
напечатав:
linux% ls -l /dev/cua* linux% ls -l /dev/ttyS*
Если у вас нет устройства, то вы должны будете создать его командой mknod. Например, предположим, что вам нужно создать устройство ttyS0:
linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 4 64
Вы можете использовать скрипт MAKEDEV, который лежит в /dev. Он упрощает
создание устройств. Например, если вам нужно создать устройств ttyS0, то
вы напечатаете:
linux# cd /dev
linux# ./MAKEDEV ttyS0
Эти строки создают устройства для входящих и исходящих устройств
и должны установить правильные права доступа.
Использование ваших многопортовых плат зависит от того какая плата у вас есть. Некоторые из них перечислены подробно в rc.serial или в 0setserial, который приходит с пакетом setserial. Я строго рекомендую взять последнюю версию setserial, если вы пытаетесь использовать многопортовые платы. Вероятно, вы должны будете создать эти устройства.
Используйте или команду mknod, или скрипт MAKEDEV. Устройства для многопортовых плат создаются сложением ``64 + номер_порта". Так, если вы хотели создать устройство ttyS17, то напечатайте:
linux# mknod -m 666 /dev/cua17 c 5 81
linux# mknod -m 666 /dev/ttyS17 c 4 81
Обратите внимание, что ``64 + 17 = 81". При использовании скрипта MAKEDEV, вы
должны ввести:
linux# cd /dev
linux# ./MAKEDEV ttyS17
Обратите внимание: руководство SIIG для IO1812 распечатывает для COM5-COM8
неправильные значения.
Они должны быть COM5 = 0x250, COM6 = 0x258, COM7 = 0x260 и COM8 = 0x268.
Обратите внимание: Digi PC/8 Interrupt Status Register - в 0x140.
Обратите внимание: для AST Fourport, вам возможно потребуется указать skip_test в rc.serial.
Читайте информацию, которая приходит с драйвером. Эти платы используют специальные устройства и нестандартные. Эта информация изменяется в зависимости от ваших аппаратных средств.
getty - программа, которая обслуживает процесс входа в систему, когда вы регистрируетесь на Unix машине. Вы должны будете использовать getty, если хотите звонить модемом на вашу Linux машину. Вы не должны использовать getty, если вы хотите только звонить наружу вашим модемом. Имеются три версии, которые обычно используются в Linux: getty_ps, mgetty и agetty. Синтаксис для этих программ отличается, так что убедитесь, что вы проверили и удостоверились, что вы используете правильный синтаксис для того getty, которым пользуетесь.
Большинство дистрибутивов приходит с установленным пакетом getty_ps. (Debian использовал agetty, но теперь использует mgetty). Он содержит две программы: getty - используется для консоли и устройств терминала, и uugetty для модемов. Я использую эту версию getty, так что на него я и буду ориентироваться.
mgetty - версия getty, главным образом для использования с модемами. Она может использоваться для аппаратных терминалов, но документация приблизительно на 99%, связана с модемами. В дополнение ко входу в систему по телефонной линии, mgetty также обеспечивает поддержку факсов и автоматическое обнаружение PPP. Документация по mgetty (поставляется в формате texinfo) достаточно хороша, и не нуждается в дополнении.
Пожалуйста, обратитесь к ней для инструкций по установке. Вы можете найти последнюю информацию о mgetty по адресу http://www.leo.org/~doering/mgetty/.
Agetty - третья разновидность getty. Это простая полнофункциональная реализация getty, которая больше подходит для виртуальных консолей или терминалов, чем для модемов.
setserial - программа, которая позволяет вам смотреть и изменять различные атрибуты последовательного устройства, включая адрес порта, прерывание и другие опции последовательного порта. Вы можете посмотреть версию вашей копии этой программы, запустив setserial без параметров. Если параметр - /dev/ttyS1, и т.д., то вы увидите некоторую информацию об этом порте.
Когда ваша Linux система загружается, настраиваются только ttyS{0-3}, используя значения по умолчанию IRQS 4 и 3. Так что, если у вас есть любые другие последовательные порты, обеспеченные другими платами или если ttyS{0-3} имеют необычный IRQ, то вы должны использовать setserial, чтобы сконфигурировать эти последовательные порты. Полный список опций есть в man.
Вы можете использовать или внешний или внутренний модем. Внутренние стоят меньше и не занимают местоо на столе или корпусе компьютера. Но внешний проще в устанавке и имеет лампочки, которые дают вам сведения о том, что происходит. Однако внешние модемы нужно выключать, когда они не используются, и вероятно, они немного потребляют электричество даже когда выключены.
Сначала, удостоверьтесь, что у вас правильный кабель. Ваш модем требует прямой кабель, без пересекающихся штырьков. Любой компьютерный магазин должен иметь их. Удостоверитесь, что вам дали то, что нужно. Если вы используете DB25 последовательный порт, то он всегда будет будет "папа" DB25 (входящий разъем). Не путайте его с параллельным портом, который является "мамой" DB25 (охватывающим). Подключите ваш модем к одному из ваших последовательных портов. Проконсультируйтесь с руководством по вашему модему об том, как сделать это, если вам нужна справка.
Для внутреннего модема вам не нужен кабель. Внутренний модем не нуждается в последовательном порте, он в него встроен. Все, что вы должны сделать - настроить его на незанятые прерывание и адрес порта ввода-вывода. Проконсультируйтесь с вашим руководством по модему, если вы затрудняетесь. Также, см. раздел ``Я могу использовать более чем два последовательных устройства?", если вам нужна справка при выборе прерываний или адресов.
На некоторых материнских платах вы должны будете отключить последовательный порт, который заменяет модем, чтобы избежать конфликтов. Это может быть выполнено перемычками или в установках BIOS, в зависимости от вашей материнской платы.
Проконсультируйтесь с руководством по вашей материнской плате.
Если у вас видеоплата IBM8514, то вы должны знать о том, что в ней есть ошибка. Вы можете столкнуться с проблемами, если захотите, чтобы ваш внутренний модем работал на ttyS3. Если Linux не обнаруживает ваш внутренний модем на ttyS3, вы можете использовать setserial, и модем будет прекрасно работать. Внутренние модемы на ttyS{0-2} не должны иметь каких-либо проблем.
Linux не производит автоматической конфигурации на ttyS3 из-за ошибки этой видеоплаты.
Используйте kermit, minicom или другую программу связи, чтобы проверить установку, прежде, чем вы перейдете к более сложным вещам типа SLIP или PPP. Вы можете найти последнюю версию kermit на http://www.columbia.edu/kermit/.
Например, надо сказать, что ваш модем был на ttyS3, и его быстродействие было 115200 бит\сек. Вы должны были бы сделать следующее:
linux# kermit
C-Kermit 6.0.192, 6 Sep 96, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY Type ? or HELP for help.
C-Kermit>set line /dev/ttyS3
C-Kermit>set carrier-watch off
C-Kermit>set speed 115200
/dev/ttyS3, 115200 bps
C-Kermit>c
Connecting to /dev/ttyS3, speed 115200.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
ATE1Q0V1 ; you type this and then the Enter key
OK ; modem should respond with this
Если ваш модем отвечает на команды AT, то вы можете считать, что ваш модем
на Linux стороне работает правильно. Теперь попробуйте позвонить на другой
модем, напечатав:
ATDT7654321
где 7654321 - номер телефона. Используйте ATDP вместо ATDT, если у вас номер
набирается пульсом. Если обращение проходит, то ваш модем работает.
Чтобы вернуться к подсказке kermit, нажав клавишу Ctrl, нажмите клавишу наклонной черты влево, затем отпустите клавишу Ctrl, и нажимите клавишу C:
Ctrl-\-C
(Back at linux)
C-Kermit>quit
linux#
Это было только тест с использованием примитивного дозвона "вручную".
Нормальный способ состоит в том, чтобы позволить kermit звонить с помощью встроенной базы данных модемов и возможностями автоматическими набора, например, для модема USRobotics (USR):
linux# kermit
C-Kermit 6.0.192, 6 Sep 1997, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help
C-Kermit>set modem type usr ; Select modem type
C-Kermit>set line /dev/ttyS3 ; Select communication device
C-Kermit>set speed 115200 ; Set the dialing speed
C-Kermit>dial 7654321 ; Dial
Number: 7654321
Device=/dev/ttyS3, modem=usr, speed=115200
Call completed.<BEEP>
Connecting to /dev/ttyS3, speed 115200
The escape character is Ctrl-\ (ASCII 28, FS).
Type the escape character followed by C to get back,
or followed by ? to see other options.
Welcome to ...
login:
См. раздел ``Программы cвязи" о программах связи, если вам нужны какие-либо указания.
Когда вы делаете исходящий звонок вашим модемом, установите быстродействие последовательного порта самым высоким, которое поддерживает ваш модем (обычно это не более 115200 бит\сек). This is not the same as the "advertised" speed of the modem such as 56K. Версии Linux с libc версии выше 5.x имеют поддержку для скоростей до 115200 бит\сек. В Linux работают даже более высокие скорости, чем эти.
Для использования модема только для исходящих звонков, вы можете сконфигурировать ваш модем.
Если вы предполагаете использовать ваш модем для входящих звонков, вы должны настроить ваш модем на то же самое быстродействие, которое вы предполагаете указать в getty. Однако, большинство модемов сегодня устанавливает свое быстродействие автоматически на одинаковое быстродействие, используя команды модема. Таким образом, getty, запущенный на скорости 115200, автоматически установит модем на это быстродействие, когда getty пошлет init строку на последовательный порт, на котором установлен модем. Вообще, фабричные значения по умолчанию, которые дают возможность исправления ошибок и аппаратного управления потоком данных - это самая лучшая установка для исходящих звонков модемом, проконсультируйтесь с руководством по вашему модему для этих установок.
Если ваш модем поддерживает аппаратное управление потоком данных (RTS/CTS), я строго рекомендую вам его использовать. Это особенно важно для модемов, которые поддерживают сжатие данных. Сначала, вы должны разрешить RTS/CTS управление потоком данных на последовательном порту непосредственно. Это лучше всего выполнять при запуске, например, в /etc/rc.d/rc.local или /etc/rc.d/rc.serial. Удостоверьтесь, что эти файлы выполняются из главного файла rc.sysinit! Вы должны сделать следующее для каждого последовательного порта, на котором вы хотите разрешить аппаратное управление потоком данных:
stty crtscts < /dev/ttyS3
Если не разрешено по умолчанию, то также разрешите RTS/CTS на вашем модеме.
В этом вам может помочь ваша программа связи. Проконсультируйтесь с
руководством по вашему модему, если необходимо, и затем сохраните настройку
вашего модем, если ваш модем поддерживает сохранение профилей.
Настройте ваш модем правильно на исходящие звонки. Если вы не читали раздел ``Как сделать исходящий звонок через мой модем?", то прочитайте его сейчас! Он содержит очень важную информацию об установке. Вы не должны читать этот раздел, если вы хотите только звонить наружу вашим модемом.
Для использования входящих и исходящих звонков, вы должны установить ваш модем некоторым образом (снова, используя AT команды на вашем модеме):
E1 включение эхоотображения
Q0 сообщать коды результата
V1 verbose ON
S0=0 не поднимать трубку (uugetty обрабатывает эту функцию опцией WAITFOR)
Если вы не установили эти параметры правильно, ваша INIT строка в вашем файле
настроек может не сработать, нарушая всю работу. Но более подробная информация
о файлах конфигурации расположена ниже ...
&C1 включать DCD только после соединения
&S0 DSR всегда включен
DTR on/off сброс модема (зависит от производителя - RTFM)
Они воздействуют на то, что ваш модем делает, когда он начинает и заканчивает
звонить.
Если ваш модем не поддерживает сохранение профилей, то вы можете установить их через INIT строку в вашем файле конфигурации. См. ниже. Некоторые модемы приходят с DIP переключателями, которые воздействуют на установки регистров. Убедитесь, что они тоже установлены правильно.
Я начал коллекционировать установки модемов для различных типов модемов. Пока, я только имею несколько из них, если вы хотите послать мне вашу рабочую конфигурацию, пожалуйста, сделайте это! Вы можете получить их на ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs
Обратите внимание: чтобы заставить мой модем USR Courier V.34 сброситься правильно, когда падает DTR, я должен был установить &D2 и S13=1 (установка бита 0 регистра S13).
На модеме USR Sportster V.34 это также работает.
Обратите внимание: некоторые модемы Supra обрабатывают DCD иначе, чем другие модемы. Если вы используете Supra, попробуйте установить &C0, а не &C1. Вы должны также установить &D2, чтобы корректно обрабатывать DTR.
Получить последнюю версию можно на sunsite.unc.edu:/pub/Linux/system/serial.
В частности, если вы хотите использовать высокие скорости (57600 и 115200 бит\сек), вы должны взять версию 2.0.7j или выше. Вы должны также иметь libc 5.x или выше.
По умолчанию, getty_ps будет сконфигурирован в соответствии с Linux FSSTND (Стандарт Файловой системы), что означает, что бинарники будут в /sbin, а файлы конфигурации будут называться /etc/conf.{uu}getty.ttySN.
Это не указано в документации! Также ожидается, что файлы блокировки будут в /var/lock. Удостоверьтесь, что у вас есть каталог /var/lock.
Если вы не хотите совместимости с FSSTND, бинарники расположаться в / и т.д, файлы конфигурации расположаться в /etc/default/{uu}getty.ttySN, и файлы блокировки в /usr/spool/uucp. Я рекомендую этот способ, если вы используете UUCP, потому что с UUCP возникнут проблемы, если вы переместите файлы блокировки туда, где он не ищет их.
getty_ps может также использовать syslogd, чтобы регистрировать сообщения. См. man для syslogd(1) и syslog.conf(5) для настройки syslogd, если он еще у вас не запущен. Сообщения регистрируются с приоритетом LOG_AUTH, ошибки используют LOG_ERR и отлажидка использует LOG_DEBUG. Если вы не хотите использовать syslogd, вы можете подредактировать tune.h в исходных файлах getty_ps, чтобы использовать регистрационный файл для сообщений вместо файла регистрации по умолчанию, именуемого /var/adm/getty.
Решите, что вы хотите - FSSTND совместимость или возможности syslog. Вы можете также выбирать комбинацию из двух. Отредактируйте Makefile, tune.h и config.h, чтобы отразить ваше решение. Затем скомпилируйте и установите согласно инструкциям, включенных в пакет.
> От этой отметки, все относящееся к getty будет относиться к getty_ps.
Ссылки на uugetty относятся к uugetty, который приходит с пакетом getty_ps. Эти инструкции не будут работать с mgetty или agetty.
Удостоверьтесь, что ваше выходное и входное устройство для последовательного порта - ваш модем включен. Если у вас модем стоит на ttyS3, вам понадобяться устройства /dev/cua3 и /dev/ttyS3. Если у вас неправильные устройства, см. раздел ``Создание ttyS устройств в /dev" о том, как создать устройства, и создайте устройства. Если вы хотите звонить наружу вашим модемом в то время, как uugetty ожидает на порту регистрации в системе, то используйте устройство /dev/cuaN вместо устройства /dev/ttySN
[Можно было бы обойтись и без cua, если программное обеспечение не требует их.]
uugetty делает проверку важного файла блокировки. Подредактируйте /etc/gettydefs, чтобы включить в него запись для вашего модема. Когда вы завершите редактирование /etc/gettydefs, вы можете проверить правиьльность синтаксиса, сделав:
linux# getty -c /etc/gettydefs
Если у вас модем со сжатием данных и скоростью 9600 бит\сек или более быстрый, вы можете блокировать ваш последовательный порт на одну скорость. Например:
# 115200 fixed speed
F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200
Если у вас ваш модем настроен на аппаратное управление потоком данных RTS/CTS,
вы можете добавить в запись CRTSCTS:
# 115200 fixed speed with hardware flow control
F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200
Если у вас медленный модем (меньше 9600 бит\сек), то вместо одной строки для одной скорости, вам потребуется несколько строк, чтобы попробовать ряд скоростей.
Обратите внимание, что эти строки связаны друг другу последним "словом" в строке, типа #38400. Между каждой записью необходимо оставлять пустые строки.
# Modem entries
115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600
57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400
38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200
19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600
9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400
2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200
vv
<sect2>Сообщение при входе в систему
<p>
Если хотите, вы можете заставить uugetty печатать интересные вещи при входе в
систему. В моих примерах, я ставлю имя системы, линию и текущую скорость
бит\сек. Вы можете добавить и другие вещи:
<tscreen><verb>
@B Текущая скорость (оценивается при определении значения @B )
в бит/сек.
@D Текущая дата в формате MM/DD/YY.
@L Последовательная линия, с которой работает getty.
@S Имя системы.
@T Текщее время в формате HH:MM:SS (24-часовой).
@U Число работающих в данный момент пользователей. В качестве
этого значения берется количество записей в файле /etc/utmp,
которые имеют непустое поле ut_name.
@V Значение VERSION, как задано в файле defaults.
Чтобы отобразить символ '@', используйте или '\@', или '@@'.
Имеется большое количество параметров, которые вы можете изменить для каждого имеющегося у вас порта.
Они выполнены в виде отдельного настроечного файла для каждого порта. Файл /etc/conf.uugetty будет использоваться всеми процессами uugetty, а /etc/conf.uugetty.ttySN будет использоваться только этим одним портом. Пример файлов конфигурации по умолчанию, может быть найден в исходниках getty_ps, которые есть в большинстве Linux-дистрибутивах. Из-за экономии места они здесь не приводятся. Обратите внимание, что, если вы используете старые версии getty (старее, чем 2.0.7e), или не используете FSSTND, то заданный по умолчанию файл будет /etc/default/uugetty.ttySN. Файл /etc/conf.uugetty.ttyS3 Грэга примерно такой:
# пример настроечного файла uugetty для Hayes-совместимых модемов
# с разрешением входящих звонков
#
# проверка наличия lock файла... Если этот lock файл есть, то uugetty
# перезапускается так, чтобы модем был заново проинициализирован
ALTLOCK=cua3
ALTLINE=cua3
# какой порт инициализировать
INITLINE=cua3
# время таймаута, после которого связь обрывается ...
TIMEOUT=60
# строка инициализации модема...
# формат: <ожидаемое> <отправляемое> ... (чат-последовательность)
INIT="" AT\r OK\r\n
WAITFOR=RING
CONNECT="" ATA\r CONNECT\s\A
# эта строка устанавливает задержку перед выдачей сообщения при входе в
# систему
DELAY=1
#DEBUG=010
Добавьте следующую строку в ваш /etc/inittab, так, чтобы uugetty запускался на вашем последовательном порту (заменив значения в соответствии с вашей системой - расположение файла конфигурации, порт, быстродействие и заданный по умолчанию тип терминала):
S3:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100
Рестарт init:
linux# init q
Скорость в вашем /etc/inittab указывается самой высокой, которую поддерживает
ваш модем.
Теперь Linux будет следить за появлением запросов на соединение на вашем последовательном порту. Можно звонить с других машин и входить в вашу систему.
uugetty имеет еще множество опций, см. полное описание в man по getty(1m). Среди прочего имеется возможность планирования и возможность обратного звонка.
Детально это описывается в Text-Terminal-HOWTO (но он все еще незавершен). Инструкции в этом разделе будут работать как для подсоедиенных терминалов, так и для других компьютеров, подключенных к последовательным портам вашей Linux машины.
Удостоверьтесь, что у вас соответствующий кабель. Нуль-модемный кабель, купленный в компьютерном магазине, может подойти, но вероятно, что он не сможет работать с аппаратным управлением потоком данных. Но он должен быть нуль- модемным кабелем! Многие компьютерные магазины выставляют этот кабель как последовательный кабель принтера. Удостоверьтесь, что вы используете ваш последовательный порт (разъем-"папу" (входящий в ответную часть) DB25 или DB9), а не ваш параллельный порт (разъем-"маму"(охватывающий) DB25 или centronics).
Для разъема DB25, вам нужно минимум:
PC "папа" DB25 Terminal DB25
TxD Передача данных 2 --> 3 RxD Прием данных
RxD Прием данных 3 <-- 2 TxD Передача данных
SG Сигнальная земля 7 --- 7 SG Сигнальная земля
Этот нуль-модемный кабель хорошо работает между двумя компьютерами, которые
используют сигналы хендшейкинга RTS/CTS, но многие терминалы используют
сигнал хендшейкинга DTR, которое не может быть установлен в linux с помощью
программы "stty". Включите в stty crtscts и соедините штырек терминала 20 (DTR) со
штырьком PC 5 (CTS).
PC "папа" DB25 Terminal DB25
TxD Передача данных 2 --> 3 RxD Прием данных
RxD Прием данных 3 <-- 2 TxD Передача данных
RTS Запрос передачи 4 --> 5 CTS Готов к передаче
CTS Готов к передаче 5 <-- 4 RTS Запрос передачи
DSR Data Set Ready 6
|
DCD Обнаружение несущей 8 <-- 20 DTR Готовность данных терминала
SG Сигнальная земля 7 --- 7 SG Сигнальная земля
6 DSR Data Set Ready
|
DTR Готовность данных терминала 20 --> 8 DCD Обнаружение несущей
Если на вашем последовательном порту стоит разъем DB9, то попробуйте следующую распайку:
PC DB9 Terminal DB25
TxD Передача данных 2 --> 2 RxD Прием данных
RxD Прием данных 3 <-- 3 TxD Передача данных
SG Сигнальная земля 5 --- 7 SG Сигнальная земля
В качестве альтернативы, вот полный DB9-DB25 нуль-модемный кабель (Вряд ли
будет работать с аппаратным хендшейкингом терминала; см. выше):
PC DB9 Terminal DB25
TxD Передача данных 2 --> 2 RxD Прием данных
RxD Прием данных 3 <-- 3 TxD Передача данных
6 DSR Data Set Ready
|
DTR Готовность данных терминала 4 --> 8 DCD Обнаружение несущей
GND Сигнальная земля 5 --- 7 GND Сигнальная земля
DCD Обнаружение несущей 1
|
DSR Data Set Ready 6 <-- 20 DTR Готовность данных терминала
RTS Запрос передачи 7 --> 5 CTS Готов к передаче
CTS Готов к передаче 8 <-- 4 RTS Запрос передачи
(RI Ring Indicator 9 не обязательно)
(Да, штырьки 2 и 3 в разъеме DB9 действительно имеют значения противоположные
значениям в разъеме DB25!)
Если вы не используете полный нуль-модемный кабель, то вам возможно придется применить следующий прием: на разъеме с компьютерной стороны, соедините RTS и CTS вместе, а также вместе соедините DSR, DCD и DTR. Таким образом, когда компьютер захочет получить сигнал хендшейкинга, он получит его (от самого себя).
Теперь, когда у вас правильный кабель?, соедините ваш терминал с вашим компьютером. Если можете, скажите терминалу игнорировать сигналы управления модемом. Пробуйте использовать в установках терминала скорость 9600 бит\сек, 8 информационных битов, 1 стоповый бит, без битов контроля по четности (или разрешите контроль по четности, если вы хотите дополнительных сложностей).
Проконсультируйтесь с вашим руководством по getty для других программ getty, например, agetty.
Добавьте записи для getty в файл /etc/gettydefs, чтобы использовать ваш терминал, если их там до сих пор нет:
# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
Если хотите, вы можете заставить uugetty печатать интересные вещи при входе в систему. В моих примерах, я ставлю имя системы и текущую линию. Вы можете добавить и другие вещи:
@B Текущая скорость (оценивается при определении значения @B )
в бит/сек.
@D Текущая дата в формате MM/DD/YY.
@L Последовательная линия, с которой работает getty.
@S Имя системы.
@T Текщее время в формате HH:MM:SS (24-часовой).
@U Число работающих в данный момент пользователей. В качестве
этого значения берется количество записей в файле /etc/utmp,
которые имеют непустое поле ut_name.
@V Значение VERSION, как задано в файле defaults.
Чтобы отобразить символ '@', используйте или '\@', или '@@'.
Когда вы завершили редактирование файла /etc/gettydefs, вы можете проверить правильность синтаксиса, сделав:
linux# getty -c /etc/gettydefs
Удостоверьтесь, что у вас нет файла конфигурации getty или uugetty для
последовательного порта, к которому подключен ваш терминал
(/etc/default{/uu}getty.ttySN или /etc/conf.{uu}getty.ttySN), поскольку он
вероятно будет пересекаться с getty, запущенном на этом терминале. Удалите
файл, если он существует.
Отредактируйте ваш файл /etc/inittab, чтобы запустить getty на последовательном порту (установив для вашего окружения правильные порт, скорость и заданный по умолчанию тип терминала):
S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100
Перезапустите init:
linux# init q
В этом месте, вы должны на терминале увидеть подсказку для входа в систему. Вам, вероятно, придется нажать Enter, чтобы привлечь внимание терминала.
Многие люди настраивают другие PC как терминалы, соединенные с Linux машинами.
Например, старые 8088 или 80286 PC отлично подходят для этой цели. Все, в чем вы нуждаетесь для запуска - это загрузочный диск DOS, содержащий версию DOS, подходящую вашему PC-терминалу, и программы связи для вашего PC-терминала. Kermit очень хорошо подходит для этой цели. Вы можете найти скомпилированные версии kermit для каждой OS на http://www.columbia.edu/kermit/. Также хорошо будут работать другие популярные программы связи DOS типа telix и procomm. Убедитесь, что ваши настройки PC-терминала содержат правильную информацию о последовательном порте.
Вы не должны читать этот раздел, если не хотите использовать три или более последовательных устройства ... (принимая, что у вас нет многопортовой платы).
Если у вас есть другой запасной последовательный порт, то да, вы можете. Число последовательных портов, которые вы можете использовать, ограничено числом прерываний (IRQs) и адресов портов ввода-вывода. Это - ограничение не системы Linux, а ограничение шины PC. Каждому последовательному устройству должны быть назначены адрес и собственное прерывание.
Если два устройства совместно используют одно и тоже прерывание, то они могут нормально работать, при условии, что эти два устройства не будут действовать одновременно. (В большинстве случаев, две программы не должны даже выполняться одновременно.) Последовательное устройство может быть последовательным портом, внутренним модемом или многопортовой последовательной платой.
Многопортовые последовательные платы специально разработаны для получения множества последовательных портов, которые совместно используют одно и то же IRQ для всех последовательных портов на плате.
Linux получает данные из них, используя различные адреса ввода-вывода для каждого порта на плате.
Обычный PC имеет ttyS0 и ttyS2 на IRQ 4, и ttyS1 и ttyS3 на IRQ 3. Вы можете увидеть, какие IRQs используются, напечатав: setserial /dev/ttyS2, и т.д. Просмотр /proc/interrupts покажет некоторых из них. Чтобы использовать более, чем два последовательных устройства, вы должны будете переназначить прерывания. Хороший подход состоит в переназначении прерывания для параллельного порта. В PC обычно для ваших параллельных портов установлены прерывания IRQ 5 и IRQ 7, но мало кто использует два параллельных порта. Вы можете переназначать одно из прерываний на последовательное устройство, и прекрасно использовать оставшийся параллельный порт. чтобы сделать это, вам нужна будет программа setserial. Кроме того, вы должны поиграть с перемычками на матернской плате, свериться с документацией на вашу плату. Установите перемычки на IRQ, который вы хотите назначить каждому порту.
Вы должны установить все так, чтобы имелось одно и только одно прерывание для каждого последовательного устройства. Вот как Грэг устанавливает его в /etc/rc.d/rc.local - вы должны сделать это в файле, который выполняется после запуска:
/sbin/setserial /dev/ttyS0 irq 3 # моя последовательная мышь
/sbin/setserial /dev/ttyS1 irq 4 # мой Wyse dumb терминал
/sbin/setserial /dev/ttyS2 irq 5 # мой модем Zoom
/sbin/setserial /dev/ttyS3 irq 9 # мой модем USR
Стандартные назначения IRQ:
IRQ 0 Таймер, канал 0
IRQ 1 Клавиатура
IRQ 2 Cascade for controller 2
IRQ 3 Последовательный порт 2
IRQ 4 Последовательный порт 1
IRQ 5 Параллельный порт 2
IRQ 6 Накопитель на гибких дисках
IRQ 7 Параллельный порт 1
IRQ 8 Часы реального времени
IRQ 9 Перенаправлен на IRQ2
IRQ 10 не назначен
IRQ 11 не назначен
IRQ 12 не назначен
IRQ 13 Математический сопроцессор
IRQ 14 Накопитель на жестких дисках 1
IRQ 15 Накопитель на жестких дисках 2
В действительности нет никакого "правильного способа" назначения прерывания. Только удостоверьтесь, что оно не используется материнской платой или любыми другими платами.
Номера прерываний 2, 3, 4, 5 или 7 - это хороший выбор. ``не назначен" означает, что в настоящее время ничего стандартно не использует эти IRQS. Также обратите внимание, что IRQ 2 - это тоже, что и IRQ 9. Вы можете вызывать его или как 2 или как 9, последовательный драйвер очень понятливый. Если у вас последовательная плата с 16-разрядным разъемом шины, то вы можете также использовать IRQ 10, 11, 12 или 15.
Только удостоверьтесь, что вы не используете IRQ 0, 1, 6, 8, 13 или 14! Они используются вашей материнской платой. Вы модете заработать множество неприятностей, используя эти IRQ не по назначению. Когда вы закончите, посмотрите /proc/interrupts и удостоверьтесь, что конфликтов нет.
Затем, вы должны установить адрес порта. Проверьте в руководстве по вашей плате установки перемычек. Подобно прерываниям, одно последовательное устройство может иметь только один адрес. Ваши порты обычно будут приходить с такими установками:
ttyS0 адрес 0x3f8
ttyS1 адрес 0x2f8
ttyS2 адрес 0x3e8
ttyS3 адрес 0x2e8
Выберите адреса, которые вы хотите использовать для каждого последовательного устройства и соответственно установите перемычки. Мой модем установлен на ttyS3, мышь на ttyS0, а мой терминал на ttyS2.
Когда вы перезагрузитесь, Linux должен увидеть ваши последовательные порты по тем адресам, на которые вы их установили. IRQ, который видит Linux, может не соответствовать IRQ, который вы устанавливаете перемычками. Не волнуйтесь об этом. Linux не делает попыток определить IRQ при загрузке, потому что определение IRQ рисковано и может быть неправильным. Используйте setserial, чтобы сообщить Linux, какое IRQ используется портом. Вы можете проверить /proc/ioports, чтобы увидеть, какие адреса порта ввода-вывода используются после загрузки Linux.
Этот раздел должен помочь вам выяснить, какую скорость нужно использовать в программах связи или getty, которые работают в вашим модемом.
Обычно вы только устанавливаете скорость параметром, заданным в getty или меню вашей коммуникационной программы (или в конфигурационном файле). Если по некоторым причинам, это не работает для высоких скоростей, то имеется возможность задавть специальные опции в setserial: с помощью опций spd_hi или spd_vhi, задаваемыми в setserial, установка 38400 фактически даст скорость 57600 (spd_hi) или 115200 (spd_vhi).
Удостоверьтесь, что для более высоких скоростей у вас имеется по крайней мере 16550A UARTS. Существуют некоторые предлагаемые скорости:
setserial -a /dev/ttyS3
Вот список нескольких коммуникационных программ, которые доступны в Интернет через FTP, если их нет в вашем дистрибутиве.
Вы можете счесть полезными несколько советов ...
Чтобы использовать zmodem с kermit, добавьте следующее к вашему .kermrc:
define rz !rz < /dev/ttyS3 > /dev/ttyS3 define sz !sz \%0 > /dev/ttyS3 < /dev/ttyS3
Убедитесь, что указали правильный порт, к которому подключен ваш модем. Затем,
чтобы использовать его, нужно только напечатать rz или sz <имя файла> в
командной строке kermit.
Чтобы тип вашего терминала автоматически устанавливался, когда вы регистрируетесь в системе, добавьте тип терминала в /etc/inittab. Если бы у меня к порту ttyS1 был подключен терминал vt100, то я добавил бы ``vt100" в команду getty:
S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100
Другие getty имеют подобные опции. Вы можете также использовать tset, который
может устанавливать характеристики терминала, когда вы регистрируетесь в
системе, и не зависит от каких-либо значений по умолчанию.
Если ls выдает результат своей работы в цвете на терминалах, поддерживающих цвет, отключите это. Включение цвета осуществляется опциями ls --color и ls --colour .
В некоторых дистрибутивах ls настроен с цветом по умолчанию. Проверьте в файлах /etc/profile и /etc/csh.cshrc псевдонимы ls. Также вы можете установить псевдоним ls в значение ls --no-color, если не хотите изменять системные значения по умолчанию.
Имеется программа, называемая vtprint, доступная на ftp://ftp.sdsu.edu/pub/vtprint и на http://www.sdsu.edu/~garrett.
Другая программа, которая будет делать это, называется xprt. Ее можно найти на ftp://sunsite.unc.edu/pub/Linux/system/printing.
Да. Если это еще не настроено (или почти настроено), то вы можете заставить Linux обнаруживать и настраивать последовательные устройства автоматически при запуске. Если необходимо добавьте строку:
/sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
в ваш файл /etc/rc.d/rc.local или /etc/rc.d/rc.serial или в файл
/etc/rc.boot/0setserial файл. Проделайте это для каждого последовательного
порта, который вы хотите настроить автоматически. Убедитесь, что используете
имена реально существующих в вашей системе устройств.
Адреса и IRQS платы смотрите в файлах rc.serial или /etc/rc.boot/0setserial, которые поставляются с программой setserial. В них можно найти множество подробностей о многопортовых платах, включая адреса ввода-вывода и имена устройств.
Имеется статья в выпуске 36 Linux Journal, , которая объясняет, как использовать последовательную консоль. См. Text-Terminal-HOWTO.
Если вы наблюдаете медленную производительность и последовательный порт слишком быстр для системы с (E)IDE дисками, то вы можете взять пакет hdparm. Это утилита, которая может изменять параметры (E)IDE устройств, включая unmasking других IRQs при выполнении дискового IRQ. Это ускорит отклик и поможет решить проблему обслуживания последовательных устройств. Убедитесь, что вы очень тщательно прочитали man страницу, так как некоторые комбинации привода/контроллера могут быть некорректными, и файловая система может разрушиться.
Также обратите внимание на утилиту irqtune, который изменяет приоритет IRQ устройства, например последовательного порта, к которому подключен ваш модем. Это может улучшить производительность последовательного устройства на вашей системе. Irqtune FAQ можно найти на http://www.best.com/~cae/irqtune.
Этот раздел не обязателен для прочтения, но может дать вам более глубокие знания Unix и мира телекоммуникаций.
Файл блокировки - это просто файл, говорящий, что указанное устройство в настоящее время занято (используется).
Они хранятся в /usr/spool/uucp или /var/lock. В Linux файлы блокировки именуются LCK..name, где name - это или имя устройства, или имя UUCP сайта. Некоторые процессы создают эти файлы блокировки для того, чтобы иметь монопольный доступ к устройству. Например, если вы делаете исходящий звонок вашим модемом, появится файл блокировки, сообщая другим процессам, что кто-то уже использует модем. Файл блокировки в основном содержат PID процесса, который занял устройство. Большинство программ проверяют наличие файла блокировки, и пытаются определить, является ли эта блокировка все еще допустимой, производя в таблице процессов поиск процесса, который блокировал устройство. Если определяется, что файл блокировки действителен, то программа (возможно) заканчивает работу. Если нет, то некоторые программы удаляют устаревший файл блокировки, и используют устройство, создавая собственный файл блокировки. Другие программы только завершают работу и сообщают вам, что устройство занято процессом.
``бод" и ``бит\сек" являются возможно одним из наиболее часто неправильно применяемых терминов в области компьютеров и телекоммуникаций. Многие люди считают эти термины взаимозаменяемыми, хотя фактически это не так!
Скорость в бодах - это количество посланных секунду сигналов, например одно посланное модемом (модем - это сокращение от "модулятор-демодулятор") изменение. Например, скорость в 1200 бод подразумевает, что один сигнал изменяется каждые 833 микросекунды. Обычные скорости модемов в бодах - 50, 75, 110, 300, 600, 1200 и 2400. Большинство высокоскоростных модемов могут работать со скоростями 2400 бод. Из-за ограничений ширины полосы частот на голосовых телефонных линиях, достичь скорости более 2400 бод тяжелее, и работает только на линиях с pristine качеством. В одном боде можно закодировать несколько бит, и таким образом получится, что скорость в битах превышает скорость в бодах. ``бод" назван по имени Эмиля Баудота (Emile Baudot), изобретателя асинхронного телеграфного принтера.
Скорость бит\сек - количество переданных за одну секунду бит. Раньше для модемов обычными скоростями бит\сек были 50, 75, 110, 300, 1200, 2400, 9600. Сегодня это - 14.4Кб, 28.8Кб, 33.6Кб, и 56Кб (они не соответствуют скоростям в кабеле "последовательный порт-модем", которые дополняют старые модемные скорости бит\сек (50-9600): 19.2Кб, 38.4Кб, 57.6Кб и 115.2Кб). При использовании модемов со сжатием V.42bis (максимальное сжатие 4:1), возможно достижение скорости до 115.2Кб/сек. Вот что имеет в виду большинство людей, когда они неправильно применяют слово ``бод".
Как начался этот бардак? Ну, когда модемы работали медленно, скорость бит\сек фактически равнялась скорости в бодах. Одним изменением фазы кодировался один бит. Термины бит\сек и бод были взаимозаменяемыми, потому что имели одинаковые значения. Например, модем 300 бит\сек также имел скорость 300 бод. Все изменилось, когда появились более быстрые модемы, и скорость передачи информации в битах превысила скорость в бодах.
UART (Universal Asynchronous Receiver Transmitter -- Универсальный Асинхронный Приемопередатчик) - это микросхема на вашей мультикарте или материнской плате. Функции UART может выполнять и другая микросхема, которая занимается кроме этого другими вещами.
Назначение UART состоит в том, чтобы преобразовать данные в биты, посылать биты по последовательной линии и затем восстанавливать данные на другом конце линии. UART имеет дело с данными, разбитыми побайтно, что удобно для представления символов ASCII.
Скажем, у вас есть терминал, подключенный к PC. Когда вы печатаете символ, терминал передает этот символ своему передатчику (тоже UART). Передатчик посылает этот байт наружу по последовательной линии побитно с определенной скоростью. UART на PC конце линии получает все эти биты и восстанавливает из них байт и помещает его в буфер.
Есть два различных типа UART. Вы вероятно слышали о dumb UART - 8250 и 16450, и FIFO UART - 16550A. Чтобы понять их различия, сначала давайте исследуем, что случается когда UART послал или получил байт.
UART непосредственно не может делать что-либо с данными, он только посылает и получает их. Для первоначальных UART, ЦП получает запрос на прерывание от последовательного устройства каждый раз, когда байт был послан или получен.
Затем ЦП перемещает полученный байт из буфера UART в область оперативной памяти или передает UART другой байт для передачи. В UART 8250 и 16450 буфера однобайтные. Это означает, что за одно прерывание ЦП посылается или принимается только 1 байт. Для низких скоростей это нормально. Но при высоких скоростях передачи, ЦП настолько загружается работой с UART, что хуже обслуживает другие задачи. В некоторых случаях, ЦП не успевает обработать прерывание вовремя, и байт затирается вновь пришедшим, потому что байты поступают в буфер UART слишком быстро.
В этой ситуации полезен UART 16550A. Эти чипы приходят с 16-байтным FIFO. Это означает, что такая микросхема может получать или передавать до 14 байтов прежде, чем она должна будет сформировать запрос на прерывание ЦП. В свою очередь ЦП может передать сразу 14 байтов за один раз. Хотя порог прерывания не всегда устанавливается в 14, все равно имеется значительное преимущество перед другими UART, которые имеют только однобайтный буфер.
ЦП получает меньшее количество прерываний, и имет больше времени для выполнения других вещей.
Данные не теряются, и все счастливы. (Существует также 16550 UART, но он обрабатывается как 16450, так как имеет дефект.)
В общем, UART 8250 и 16450 должны прекрасно подходить для скоростей до 38400 бит\сек. На скоростях больее 38400 бит\сек, вы могли бы заметить потерю данных. Другие операционные системы для PC (definition used loosely here), вроде DOS, не многозадачные, так что они могли бы лучше работать с 8250 или 16450s. Именно поэтому некоторые люди не замечают потерь данных, пока не начинают работать в Linux.
В не-UART и интеллектуальных многопортовых платах стоят DSP чипы, которые имеют дополнительные буферы и более развитое управление, и таким образом ЦП менее загружается.
Например, платы Cyclades Cyclom и Stallion EasyIO используют Cirrus Logic CD1400 RISC UART, а многие платы используют ЦП 80186 или даже специальные RISC ЦП, для обработки последовательного ввода-вывода.
Имейте в виду, что dumb UART не плохи, просто они не очень хороши для высоких скоростей. У вас не должно возникать проблем с подключением терминалов или мышей к этим UART. Но, для высокоскоростных модемов 16550A - определенно обязателен.
На большинстве новых PC (486's, Pentiums или выше) установлены 16550A. Если ваша техника действительно старая, то вы можете нарастить ее вычислительные возможности купив микросхем 16550A и заменив ваши 16450 UART. Если используется другой тип микросхемы, то вам не повезло. Если UART вставлется в "кроватку", то обновление упрощается (если вы можете найти замену). Новые и старые микросхемы совместимы по значениям выводов. Возможно, более правильно купить последовательную плату через Интернет (некоторые розничные торговцы их продают).
Удостоверьтесь, что вы используете правильный для вашей версии init синтаксис.
Различные init используют различный синтаксис в файле /etc/inittab. Удостоверьтесь, что вы используете правильный синтаксис для вашей версии getty.
Эта проблема может возникать, когда DCD или DTR неправильно установлены. DCD должен быть установлен только когда имеется фактическое соединение (то есть кто-то позвонил), а не когда getty наблюдает за состоянием порта. Проверьте, что ваш модем сконфигурирован так, чтобы DCD устанавливался только когда имеется соединение. DTR должен быть установлен всякий раз, когда кто-то использует или наблюдает за линией, вроде getty, kermit или любой другой программы связи.
Другая общая причина ошибки ``device busy", - что вы настроили ваш последовательный порт на уже кем-то занятое прерывание.
Когда каждое устройство инициализируется, оно запрашивает Linux о своих правах использования аппаратных прерываний. Linux смотрит, какое прерывание назначено усройству, и если это прерывание уже занято, то устройство не сможет корректно проинициализироваться. Устройство не имеет другого способа сообщить вам о своей неправильной инициализации, кроме выдачи сообщения "device busy", когда вы попытаетесь воспользоваться этим устройством. Проверьте прерывания на всех ваших платах (последовательных, ethernet SCSI и т.д.). Поищите конфликты IRQ.
Удостоверьтесь, что ваш модем сконфигурирован правильно. Проверьте регистры Е и Q. Это может происходить, когда ваш модем общается с getty.
Удостоверьтесь, что в вашем /etc/inittab getty вызывается правильно.
Неправильный синтаксис или имена устройств могут вызвать серьезные проблемы.
Проверите правильность синтаксиса вашего /etc/gettydefs, делая следующее:
linux# getty -c /etc/gettydefs
Также такое может случиться при неудачной инициализации uugetty . См. раздел ``getty или uugetty все еще не работает".
Вероятно у вас конфликт IRQ. Удостоверьтесь, что это не так. Проверьте все ваши платы (последовательные, ethernet, SCSI и т.д ...). Проверьте установки перемычек и параметры setserial для всех ваших последовательных устройств. Также попытайтесь обнаружить конфликты в /proc/ioports и /proc/interrupts .
Это может случиться, когда ваш модем не сбрасывается при отсутствии DTR. Я видел как светодиоды RD и SD сходили с ума, когда это случалось. Вы должны сбросить ваш модем. В большинстве Hayes-совместимых модемов это делается командой &D3, но на моем USR Courier, я должен был установить &D2 и S13=1. Проверьте ваше руководство по модему.
# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
Затем, уничтожьте процесс getty, так что новый будет порожден с новой записью.
Затем перезапустите init, напечатав init q. Запись должна выглядеть следующим образом:
s1:345:respawn:/sbin/agetty -L 9600 ttyS1 vt100
Если вы попробуете заставить работать ваш модем быстрее, чем на 38400 бит\сек, и у вас нет UART 16550A, то вы должны обновить вашу технику. О UART написано в разделе ``Что такое UART?".
Это не совсем так. Linux не пытается обнаружить IRQ при запуске, он делает только обнаружение последовательных устройств. Таким образом неважно, что он говорит о IRQ, потому что он принимает только стандартные IRQS.
Но когда при загрузке setserial изменяет IRQ, вы должны увидеть это на экране.
Так, например, при том, что я устанавливаю ttyS2 на IRQ 5, я вижу
Jan 23 22:25:28 misfits vmunix: tty02 at 0x03e8 (irq = 4) is a 16550A
вначале загрузки Linux. Вы должны использовать setserial, чтобы сообщить Linux IRQ, который вы используете.
Если Linux ищет /dev/modem, когда вы пытаетесь передавать файлы, посмотрите файлы /etc/profile или /etc/csh.cshrc. Возможно, что в этих файлах определены несколько псевдонимов, как это случается в некоторых дистрибутивах, особенно в Slackware. Эти псевдонимы запутывают программы zmodem. Уберите их или исправьте.
Это случается на виртуальных консолях, когда вы посылаете двоичные данные на ваш экран, или иногда при последовательных соединениях. Способ устранить это состоит в том, чтобы напечатать echo ^v^[c. Делается это так:
linux% echo <ctrl>v<esc>c
Есть опция DEBUG, которая приходит с getty_ps. Отредактируйте ваш настроечный файл /etc/conf.{uu}getty.ttySN и добавьте DEBUG=NNN. Где NNN - одна из следующих комбинаций чисел в зависимости от того, что вы собираетесь отлаживать:
D_OPT 001 установки опций
D_DEF 002 обработка файлов по умолчанию
D_UTMP 004 обработка utmp/wtmp
D_INIT 010 инициализация линии (INIT)
D_GTAB 020 обработка файла gettytab
D_RUN 040 другая диагностика времени выполнения
D_RB 100 отладка ringback
D_LOCK 200 обработка файла блокировки uugetty
D_SCH 400 обработка schedule
D_ALL 777 все вместе
Для первой отладки отлично подходит DEBUG=010.
Если у вас запущен syslogd, отладочная информация появится в ваших log-файлах. Если syslogd не запущен, то информация появится в /tmp/getty:ttySN для отлаживаемого getty и /tmp/uugetty:ttySN для uugetty, и в log-файле /var/adm/getty.log . Посмотрите в отладочной информации, что происходит. Наиболее вероятно, что вам придется настроить некоторые из параметров в вашем файле конфигурации, и перенастроить ваш модем.
Вы могли бы также попробовать mgetty. Для некоторых он проще.
comp.os.linux.answers FAQs, How-Tos, READMEs итд о Linux.
comp.os.linux.hardware Аппаратная совместимость с ОС Linux
comp.os.linux.networking Работа с сетями и связь в Linux.
comp.os.linux.setup Установка Linux и администрирование системы.
comp.terminals
В основном первоначальный HOWTO был написан Greg Hankins ( greg.hankins@cc.gatech.edu). Он также переработал множество вкладов от других людей, чтобы поддержать непрерывность стиля и последовательность изложения.
Он писал: "Спасибо каждому, кто способствовал работе или комментировал документ, список людей стал слишком длинен, чтобы перечислить (больше сотни) Специальная благодарность Ted T'so за ответы на вопросы о последовательных драйверах, Kris Gleason, который поддерживал getty_ps, и Gert Dцring, который поддерживает mgetty."
КОНЕЦ SERIAL HOWTO