Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1669 / 116 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 3:

Установка телекоммуникационного оборудования в ОС Linux

Команда setserial

Команда setserial применяется для установки и настройки отдельных последовательных портов в системе на базе ОС Linux. Каждый порт, используемый операционной системой Linux, должен быть настроен командой setserial. Как видно из листинга 3.3, по умолчанию в системе на базе ОС Linux конфигурируются четыре стандартных последовательных СОМ-порта. Если имеющийся у вас модем использует нестандартные прерывания IRQ и адреса ввода-вывода или же используется мультипортовая плата, то для правильного конфигурирования портов в системе необходимо использовать программу setserial.

Команда setserial используется в двух форматах:

setserial [-abqvVW] device [parameter 1[arg] ] ...
setserial -g [-abv] device ...

Опция -g используется для запроса информации об указанных в команде устройствах. В листинге 3.5 дается пример работы команды setserial в ОС Linux.

1 [root@shadrach rich]$ /sbin/setserial -g /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3
2 /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRO: 4
3 /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
4 /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
5 /dev/ttyS3, UART: 16550A, Port: 0x02e8, IRQ: 3
6 [root@shadrach rich]$
Листинг 3.5. Пример работы команды setserial

В первой строке листинга 3.5 присутствует команда setserial с опцией -g, с помощью которой на экран выводится информация о конфигурации последовательных портов. Запускать команду setserial следует только с правами пользователя root. В строках 2–5 представлена информация о последовательных портах для данной системы на базе ОС Linux в ответ на запрос команды setserial. В каждой строке представлена информация об отдельном порте. Обратите внимание, что в строке 4 не указан тип UART (стоит "unknown") для порта ttyS2, так как этот порт не используется. Это может ввести вас в заблуждение, поскольку порта просто нет физически.

С помощью одной или нескольких опций, введенных в командной строке с командой setserial, можно управлять выводом информации на экран. По умолчанию вывод на экран с помощью команды setserial производится с опцией -v, как это показано в листинге 3.5. Если задать опцию -b, то выводятся обобщенные данные. Например:

/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A.

Здесь та же информация представлена в компактном виде. Опция -a используется для получения подробного отчета о конфигурации порта. Например:

/dev/ttyS0, Line 0, UART: 16550A, 
Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000, closing_wait2: infinite
Flags: spd_normal skip_test auto_irq session_lockout.

Опция -a отображает значения всех параметров, используемых операционной системой Linux для управления портом. Все эти параметры можно устанавливать, задавая команду setserial в первом формате, как было показано выше. В табл. 3.4 приведены параметры, которые можно изменять с помощью команды setserial.

Таблица 3.4. Параметры команды setserial
Параметр Описание
port N Задает устройству номер порта ввода-вывода
irq N Задает устройству номер прерывания IRQ
uart type Задает устройству тип порта UART
autoconfigure Автоматическое назначение параметров последовательному устройству
auto_irq Автоматически определить номер прерывания IRQ для последовательного устройства
^auto_irq Не пытаться автоматически определять номер прерывания IRQ для последовательного устройства во время автоконфигурирования
skip_test Пропустить тестирование UART в течение автоконфигурирования
^ skip_test Не пропускать тестирование UART в течение автоконфигурирования
baud_base Установить базовую скорость передачи для порта (как правило, тактовая частота, деленная на 16)
spd_hi Работать со скоростью 57600 бит/с при запросе приложением 38400 бит/с
spd_vhi Работать со скоростью 115200 бит/с при запросе приложением 38400 бит/с
spd_cust Использовать наибольший общий делитель при запросе приложением 38400 бит/с; установить baud_base, деленное на делитель
spd_normal Работать со скоростью 38400 бит/с при запросе приложением 38400 бит/с
divisor Устанавливает значение spd_cust
sak Использовать клавишу "Break" в качестве секретной
^sak Запретить использование клавиши "Break" в качестве секретной
fourport Конфигурировать устройство в качестве адаптера (платы) AST Fourport
^fourport Запретить конфигурировать устройство в качестве адаптера (платы) AST Fourport
close_delay D Устанавливает интервал времени, в течение которого сигнал DTR должен оставаться низким после закрытия порта, в сотых долях секунды (по умолчанию 50 )
closing_wait D Устанавливает интервал времени, в течение которого ядро должно ожидать пока данные поступят с последовательного порта после его закрытия, перед тем как приемник будет отключен, в сотых долях секунды. Отсутствует значение по умолчанию, ожидать до бесконечности
closing_wait2 D Устанавливает интервал времени, в течение которого ядро должно ожидать пока данные поступят с последовательного порта после его закрытия, после того как приемник будет отключен, в сотых долях секунды. По умолчанию 30
session_lockouot Блокировать доступ к порту другим сеансам на время установки исходящего соединения (cua)
^session_lockouot Не блокировать доступ к порту другим сеансам на время установки исходящего соединения
pgrp_lockout Блокировать доступ к порту другим процессам на время установки исходящего соединения
^pgrp_lockout Не блокировать доступ к порту другим процессам на время установки исходящего соединения
hup_notify Посылать уведомление о том, что процесс ожидает установки исходящего соединения
^hup_notify Не посылать уведомление о том, что процесс ожидает установки исходящего соединения
split_termios Воспринимать параметры портов для входящих и исходящих соединений отдельно
^split_termios Не воспринимать параметры портов для входящих и исходящих соединений отдельно
callout_nohup Если порт открыт для исходящего соединения, не класть трубку при пропадании несущей
^callout_nohup Если порт открыт для исходящего соединения, класть трубку при пропадании несущей

Команде setserial всегда нужно задавать устройство, с которым она будет работать. Если используются значения адресов ввода-вывода и номера прерывания IRQ по умолчанию, то их можно не указывать в командной строке. Далее все параметры можно вводить в командной строке в произвольном порядке. Например:

setserial /dev/ttyS3 autoconfigure auto_irq skip_test

Этой строкой мы пытаемся автоматически сконфигурировать последовательный порт СОМ4.

Сценарии для setserial

Так же, как и в случае программы ifconfig, все настройки, сделанные программой setserial, при перезагрузке ядра ОС Linux стираются. Таким образом, команду setserial следует выполнять для каждого СОМ-порта в системе при каждой загрузке. Так как это довольно важная функция, то большинство распространителей ОС Linux включают в свои версии сценарии для выполнения команды setserial в процессе загрузки системы.

Александр Андреев
Александр Андреев
Россия
Андрей Мальщуков
Андрей Мальщуков
Россия