Рассмотрим две наиболее полезных утилиты конфигурации последовательных устройств: setserial и stty.
Ядро при запуске само пытается определить настройки устройств, но из-за их большого разнообразия это не всегда возможно. Хороший пример того, где это является проблемой, внутренние модемы, о которых мы говорили ранее. UART, который они используют, имеет 16-байтовый буфер FIFO, но он похож на UART 16450. Если мы определенно не сообщаем драйверу, что этот порт является устройством UART 16550, ядро не будет использовать расширенный буфер. Еще одним примером являются четырехпотровые карты, которые позволяют поделить один IRQ между несколькими устройствами. Нам, вероятно, придется сообщать ядру, который IRQ-порт предполагается использовать, и что IRQ может быть разделен несколькими устройствами.
setserial была создана, чтобы конфигурировать последовательный драйвер во время выполнения. Команда setserial обычно выполняется при начальной загрузке из скрипта, который в одних дистрибутивах называется 0setserial, а в других rc.serial. Этот скрипт обязан инициализировать последовательный драйвер, чтобы разместить любые нестандартные или необычные последовательные аппаратные средства в машине.
Общий синтаксис для команды setserial:
setserial device [parameters] |
Команда setserial имеет большое количество параметров. Наиболее важные из них описаны в таблице 4-1. Остальные можно найти на man-странице по setserial.
Таблица 4-1. Параметры командной строки для setserial
Параметр | Описание |
---|---|
port port_number | Определяет адрес порта ввода-вывода последовательного устройства. Должен быть определен в шестнадцатеричной записи, например, 0x2f8. |
irq num | Определяет прерывание, используемое последовательным устройством. |
uart uart_type | Определяет тип UART последовательного устройства. Общие значения 16450, 16550 и т.д. Установка этого значение в none не отключит это последовательное устройство. |
fourport | Задание этого параметра инструктирует последовательный драйвер ядра, что этот порт является одним из портов платы AST Fourport. |
spd_hi | Предписывает UART использовать быстродействие 57.6 kbps, когда процесс запрашивает 38.4 kbps. |
spd_vhi | Предписывает UART использовать быстродействие 115 kbps, когда процесс запрашивает 38.4 kbps. |
spd_normal | Предписывает UART использовать заданное по умолчанию быстродействие 38.4 kbps, когда запрашивается. Этот параметр используется, чтобы отменить эффект spd_hi или spd_vhi на определенном последовательном устройстве. |
auto_irq | Этот параметр заставит ядро сделать попытку автоматически определить IRQ определенного устройства. Эта попытка не может быть полностью надежной, так что, вероятно, лучше думать об этом как о просьбе к ядру предположить IRQ. Если Вы знаете IRQ этого устройства, Вы должны определить его, используя параметр irq. |
autoconfig | Это параметр должен быть определен вместе с параметром port. Когда этот параметр задан, setserial инструктирует ядро сделать попытку автоматически определить тип UART на порте с заданным адресом. Если параметр auto_irq также задан, ядро попытается автоматически определить IRQ. |
skip_test | Отменяет автоопределение типа UART. Полезен, если ядро определяет его неправильно. |
Типичный и простой файл rc для настройки Ваших последовательных портов при начальной загрузке показан в примере 4-1. Большинство дистрибутивов Linux включают более сложные файлы.
Пример 4-1. Образец файла rc.serial
# /etc/rc.serial - serial line configuration script. # # Configure serial devices /sbin/setserial /dev/ttyS0 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS1 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS2 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig # # Display serial device configuration /sbin/setserial -bg /dev/ttyS* |
Команда /sbin/setserial -bg /dev/ttyS* в последней строке будет печатать аккуратно форматируемое резюме аппаратной конфигурации всех активных последовательных устройств. Образец такого вывода показан в примере 4-2 .
Имя stty, возможно, произошло от сокращения "set tty", но команда stty может также использоваться, чтобы отобразить конфигурацию терминала. Возможно, даже больше, чем setserial, команда stty обеспечивает изумительное число характеристик, которые Вы можете легко настроить. stty обычно используется, чтобы конфигурировать параметры терминала, типа того, будут ли символы отображены на экране, или какая клавиша должна генерировать сигнал прерывания. Мы объяснили ранее, что последовательные устройства являются tty-устройствами, а значит, команда stty применима к ним.
Одно из важнейших применений stty заключается в управлении аппаратным подтверждением связи на устройстве. Мы кратко говорили ранее относительно аппаратного подтверждения связи. Значение по умолчанию конфигурация для последовательных устройств: аппаратное подтверждение заблокировано. Эта установка позволяет работать последовательным кабелям “three wire”. Они не поддерживают необходимые сигналы для аппаратного подтверждения связи, и если оно включено по умолчанию, они будут не способны передать сигнал, чтобы изменить это.
Удивительно, но некоторые программы не допускают аппаратное подтверждение связи, так что если Ваш модем эту функцию поддерживает, Вы должны конфигу- рировать его так, чтобы ее использовать (проверьте руководство по модему, чтобы узнать, какую команду применить) и сконфигурировать последовательное устройство, чтобы учитывать это подтверждение. Команда stty имеет параметр crtscts, который включает аппаратное подтверждение связи на устройстве. Вам придется использовать его. Команда лучше всего должна быть выдана из rc.serial файла (или его эквивалента) при начальной загрузке. Образец показан в примере 4-3.
Пример 4-3. Файл rc.serial с командами stty
# stty crtscts < /dev/ttyS0 stty crtscts < /dev/ttyS1 stty crtscts < /dev/ttyS2 stty crtscts < /dev/ttyS3 # |
Команда stty работает на текущем терминале, но используя переадресацию ввода ("<"), мы можем с помощью stty управлять любым tty-устройством. Про символы "<" или ">" регулярно забывают. Новые версии stty имеют более удачный синтаксис для таких задач. Чтобы использовать новый синтаксис, я переписал мой пример настройки. Новую его версию можно посмотреть в примере 4-4.
Пример 4-4. Файл rc.serial с командами stty (новый синтаксис)
# stty crtscts -F /dev/ttyS0 stty crtscts -F /dev/ttyS1 stty crtscts -F /dev/ttyS2 stty crtscts -F /dev/ttyS3 # |
Я упомянул, что команда stty может использоваться, чтобы отобразить параметры конфигурации терминала tty-устройства. Чтобы отобразить все активные параметры настройки на tty-устройстве, скомандуйте:
$ stty -a -F /dev/ttyS1 |
Вывод этой команды показан в примере 4-5, Он дает Вам состояние всех параметров для этого устройства. Параметр, показанный с предшествующим минусом, как в -crtscts, означает, что данное свойство выключено.
Пример 4-5. Вывод команды stty -a
speed 19200 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -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 |
Описание наиболее важных из этих параметров дано в таблице 4-2. Каждый параметр может быть включен командой stty или выключен командой stty с символом - перед этим параметром. Таким образом, чтобы отключить аппаратное подтверждение связи на ttyS0, используется:
$ stty -crtscts -F /dev/ttyS0 |
Таблица 4-2. Параметры stty для настройки последовательных устройств
Параметр | Назначение |
---|---|
N | Устанавливает быстродействие линии в N бит в секунду. |
crtsdts | Включить/выключить аппаратное подтверждение связи. |
ixon | Включить/выключить XON/XOFF управление потоком. |
clocal | Включить/выключить сигналы управления модема типа DTR/DTS и DCD. Это необходимо, если Вы используете последовательный кабель "three wire", поскольку он не обеспечивает эти сигналы. |
cs5 cs6 cs7 cs8 | Установить число бит данных соответственно в 5, 6, 7 или 8. |
parodd | Включить проверку на нечетность. Отключение этого параметра включает проверку на четность. |
parenb | Включить проверку четности. Когда этот параметр выключен, контроль четности или нечетности не используется. |
cstopb | Включить использование двух стоп-бит на символ. Когда этот параметр выключен, используется один стоп-бит на символ. |
echo | Включить/выключить повторение полученных символов обратно отправителю. |
Следующий пример объединяет некоторые из этих параметров и устанавливает устройство ttyS0 на 19,200 bps, 8 бит данных, без контроля четности, но с аппаратным подтверждением связи с заблокированным ECHO-отбражением:
$ stty 19200 cs8 -parenb crtscts -echo -F /dev/ttyS0 |
Назад | Глобальное оглавление | Вперед |
Последовательное оборудование | Локальное оглавление | Последовательное оборудование и запрос login: |