Рис. 8-3. Кабель нулевого модема RS-232-C
---------------------------------------------------------------------------
DTE-1 DTE-2
|| ||
ЗАЩИТНАЯ ЗЕМЛЯ 1 ||-------------------------|| 1
(PROTECTIVE GROUND) || ||
|| ||
СИГНАЛЬНАЯ ЗЕМЛЯ 7 ||-------------------------|| 7
(SIGNAL GROUND) || ||
|| ||
ПЕРЕДАЧА ДАННЫХ 2 ||----------\ /----------|| 2
(TRANSMIT DATA) || . ||
ПРИЕМ ДАННЫХ 3 ||<---------/ \--------->|| 3
(RECEIVE DATA) || ||
|| ||
ЗАПРОС ПЕРЕДАЧИ 4 ||----- -----|| 4
(REQUEST TO SEND) || | | ||
|| | | ||
ГАШЕНИЕ ПЕРЕДАЧИ 5 ||<----\ /---->|| 5
(CLEAR TO SEND) || \---\ /---/ ||
|| . ||
ИДЕТ ПЕРЕДАЧА ДАННЫХ 8 ||<---------/ \--------->|| 8
(DATA CARRIER DETECT) || ||
|| ||
ГОТОВНОСТЬ НАБОРА ДАННЫХ 6 ||<---------\ /--------->|| 6
(DATA SET READY) || . ||
ГОТОВНОСТЬ ТЕРМИНАЛА 20 ||----------/ \----------|| 20
(DATA TERMINAL READY) || ||
|| ||
---------------------------------------------------------------------------
Линии 1 и 7 используются для шасси и сигнальной земли
соответственно. Линии 2 и 3 пересекаются таким образом, чтобы когда
одна сторона говорит, другая слушала. Обе стороны могут говорить
одновременно (это называется полнодуплексным режимом), если мы
используем различные наборы проводов.
Для имитации управляющих сигналов линии 4, 5 и 8 подсоединяются
так, как показано на рис. 8-3. Каждый раз, когда устройство DTE-1
активизирует линию "Request to Send" ("Запрос передачи"), т.е.
передает по ней сигнал, оно получает назад сигнал "Clear to Send"
("Гашение передачи"), указывающий, что другая сторона готова принять
данные. Затем, посылая сигнал по линии "Dаta Carrier Detect" ("Идет
передача данных"), устройство DTE-1 сообщает другой стороне, что
поступают данные. Такое методичное "аппаратное рукопожатие"
гарантирует, что никакие данные не будут отправлены, пока другая
сторона не будет готова их принять.
Линии 6 и 20 подсоединяются так, чтобы обеспечить последние
управляющие сигналы нулевого модема. Пока DTE активно ("Data Terminal
Ready" - "Готовность терминала", линия 20), другая сторона считает,
что имеет дело с активным модемом ("Data Set Ready" - "Готовность
набора данных", линия 6). При таком способе соединения линий 6 и 20
всякий раз, когда вы выдергиваете ваш кабель из машины или
переключаете его на другой канал соединительной коробки, другая
сторона теряет ваш сигнал активности и отключается (или генерирует
сигнал HUP - hangs up, повесить трубку телефона). Чтобы сделать такой
кабель, который не вызывает отключения при вынимании штепселя (т.е.
NOHUP), присоедините выход "Data Terminal Ready" ко входу "Data Set
Ready" на том же устройстве DTE. Это заставляет систему сообщать
самой себе, что модем всегда готов.
Заметим, что рассмотренная схема подключения нулевого модема
является рекомендуемой, но существуют и другие способы, поэтому не
думайте, что все нулевые модемы одинаковы. В каждом конкретном случае
для нулевых модемов учитывается определенное окружение или функция,
например наличие безобрывного (nohup) варианта подключения.
Теперь, когда мы знаем два различных способа соединения машин,
мы можем рассмотреть способы коммуникаций и типы подключения, которые
могут нам пригодиться.
ДОСТУП МИКРО-ЭВМ ИЛИ ТЕРМИНАЛА К СИСТЕМЕ UNIX
В этом разделе мы рассмотрим различные способы общения микро-ЭВМ
и автономных терминалов с системой UNIX. Мы предполагаем, что одно
устройство DTE работает не под управлением UNIX и обращается к
другому устройству, управляемому системой UNIX.
ПРЯМОЕ ПОДКЛЮЧЕНИЕ
В простейшем случае имеется терминал или микро-ЭВМ,
подсоединенные непосредственно к системе UNIX. Это очень часто
встречается в системах разработки, когда UNIX используется в качестве
кросс-компилятора, а результирующий код загружается в микро-ЭВМ.
Другая ситуация - когда терминалы находятся на рабочих столах
сотрудников и применяются для выполнения бумажной работы, отправки
почты, печати документов и т.д. Типичные конфигурации с прямым
подсоединением показаны на рис. 8-4.
Обычный сценарий подключения терминала выглядит примерно таким
образом. Пользователь с помощью терминала, например DEC VT-100,
регистрируется в системе UNIX по прямой связи. Терминальное
устройство DTE должно быть установлено в соответствии с правильной
внутренней конфигурацией, включая скорость в бодах, стартовые и
стоповые биты, число битов данных и четность. Это обычные установки
терминала, которые можно задать либо тумблерными переключателями,
либо при помощи терминальной микропрограммы "SETUP".
Микро-ЭВМ, в отличие от терминала, должна запустить некоторое
коммуникационное программное обеспечение для корректного управления
аппаратурой. Эти программы обычно снабжены меню или каким-то другим
способом указания параметров - таких же, как у терминалов.
Действительно, имеются программные пакеты, обеспечивающие полную или
почти полную эмуляцию популярных терминалов, таких как VT-100.
Коммуникацинное программное обеспечение, используемое вами,
устанавливается не специально для UNIX, а для обработки сигналов
RS-232-C, которые обычно не зависят от того, прямое ли подсоединение
или через модем.
Рис. 8-4. Прямое подключение терминалов и микро-ЭВМ к UNIX
---------------------------------------------------------------------------
DTE-1 DTE-2
ДЕЙСТВИЕ ДЕЙСТВИЕ
+----------+ +--------+
Микропрограмма | | Нулевой модем| | getty 9600 tty00
SETUP | терминал |--------------| tty00 | login имя_польз
| | | | sh
+----------+ | |
| UNIX |
+----------+ | |
Коммуникационное | | Нулевой модем| |
программное | микро-ЭВМ|--------------| tty01 |
обеспечение | | | |
+----------+ +--------+
---------------------------------------------------------------------------
В качестве кабеля, соединяющего терминал (или микро-ЭВМ) с
системой UNIX, нужно использовать нулевой модем. Когда
коммуникационное устройство DCE отсутствует, применяется кабель
нулевого модема.
В системе UNIX на терминальном устройстве DTE должна быть
утилита getty (что первоначально означало "get teletype" - доступ к
телетайпу), которая работает с определенным портом и обнаруживает
момент, когда кто-то пытается зарегистрироваться в системе. Программа
getty (описанная в init(M) и getty(M)) выводит подсказку "login:" и
читает символы, поступающие по линии.
При прямом подключении процесс getty может работать со скоростью
9600 бод, поэтому пользователи могут получить выигрыш от применения
этой скорости. Это значительно быстрее, чем 1200 или иногда 2400 бод
- скоростей, которые используются чаще всего при работе с обычными
телефонными линиями. В зависимости от того, как установлен файл
gettydefs, вы можете обычно изменить скорость работы getty, нажимая
клавишу break. Клавиша break генерирует не символ, а сигнал в линию,
который длится определенный интервал времени. Драйверы устройств в
системе UNIX распознают этот сигнал и действуют соответствующим
образом. Рассмотрение самого метода, с помощью которого getty
работает на различных скоростях, выходит за пределы данной книги.
Важно знать, что если getty работает на скорости 9600 бод, а вы
используете терминал, установленный на 1200 бод, то вам нужно
прокрутить переключение скоростей getty с 9600 бод через все
промежуточные скорости до достижения значения 1200 бод. Держите
клавишу break нажатой до тех пор, пока getty не установится на нужную
вам скорость. Следующий пример взят из файла gettydefs в OC XENIX
System V и показывает, как связаны между собой скорости обмена.
---------------------------------------------------------------------------
| 5# B9600 PARENB CS7 OPOST ONLCR # B9600 SANE IXANY #Login: #1
| 4# B4800 PARENB CS7 OPOST ONLCR # B4800 SANE IXANY #Login: #5
| 3# B2400 PARENB CS7 OPOST ONLCR # B2400 SANE IXANY #Login: #4
| 2# B1200 CS8 OPOST ONLCR # B1200 SANE IXANY #Login: #3
| 1# B300 CS7 OPOST ONLCR # B300 SANE IXANY #Login: #2
|
Здесь указание #5 в файле inittab (или в файле ttys для
пользователей XENIX и System III) порождает процесс getty, работающий
на скорости 9600 бод. Если вы нажимаете клавишу break, следующим по
порядку является номер 1 (как указано в конце строки номер 5). Если
вы нажимаете break еще раз, то следующей является строка номер 2, и
т.д. Если вы нажмете break достаточное количество раз, скорость getty
вернется по циклу к значению 9600 бод.
Вся последовательность действий, связанных с регистрацией в
системе, выглядит примерно так. Сначала init порождает процесс getty
(инициируемый из файла /etc/inittab) на определенном номере терминала
и с определенной скоростью. При этом устанавливаются характеристики
линии и выдается регистрационная подсказка. Когда пользователь вводит
регистрационное имя, getty проверяет его на правильность, а затем
выполняет программу login. Login запрашивает пароль, зашифровывает
его и сверяет с зашифрованным паролем в файле /etc/passwd. Если
пароли совпадают, login запускает процесс shell, который печатает
shell-подсказку и читает ваши команды, поступающие с терминала. Какой
именно shell будет запущен - определяется записью в файле паролей,
соответствующей данному регистрационному имени. Моему
регистрационному имени соответствует такая запись:
russ:j9egLecqEpXLg:201:51:Russ Sage:/usr/russ:/bin/shV
В этом случае запускается System V shell, один из новых
shell-интерпретаторов фирмы AT&T.
ДИСТАНЦИОННОЕ ПОДКЛЮЧЕНИЕ
Альтернативой прямому подключению является дистанционное
подключение через модемную линию, показанное на рис. 8-5. Установка
терминала или конфигурирование микро-ЭВМ выглядят примерно так же,
как и в предыдущем случае, за исключением скорости обмена, на которой
работает терминал. Для большинства модемов она должна равняться 1200
бодам.
Рис. 8-5. Дистанционное подключение терминалов и микро-ЭВМ к UNIX
---------------------------------------------------------------------------
ДЕЙСТВИЕ
Команды модема
DTE-1 DTE-2
+----------+ ***** +--------+
| | прямой * * | |