Аппаратные средства для последовательных линий

На данный момент Linux поддерживает множество последовательных плат, работающих на основе стандарта RS-232, который является наиболее распространенным стандартом для последовательных коммуникаций в мире ПК.

Хотя использование аппаратных средств рукопожатия не является обязательным, они весьма полезны. Они позволяют одной из сторон уведомлять другую о своей готовности принимать данные или о необходимости ожидания. Линии, отвечающие за это, называются "Clear to Send" (CTS) и "Ready to Send" (RTS), что и объясняет название такого рукопожатия — "RTS/CTS".

В ПК интерфейс RS-232 обычно контролируется с помощью чипа UART, производного от чипа 16450 или его более новой версии, NSC 16550A. Некоторые устройства, особенно внутренние модемы на базе чипов Rockwell, могут использовать другие чипы, программируемые так, чтобы имитировать поведение 16550.

Основное отличие между 16450 и 16550 заключается в том, что последний имеет буфер FIFO размером в 16 байт, в то время как у первого — всего 1 байт. Это делает 16450 подходящим для работы на скорости 9600 бод, в то время как для более высоких скоростей рекомендуются чипы, совместимые с 16550. Помимо указанных чипов, Linux также поддерживает чип 8250, разработанный специально для PC-AT.

В стандартной конфигурации ядро системы ищет четыре стандартных последовательных порта от COM1 до COM4, которые связаны с устройствами с минорными номерами от 64 до 67, как указано выше.

Если вы хотите настроить свои последовательные порты иначе, используйте команду setserial от Ted Tso в скрипте rc.serial. Этот скрипт должен вызываться из /etc/rc при загрузке системы. Он использует команду setserial для конфигурации последовательных устройств. Вот примерный вид типичного скрипта rc.serial:

# /etc/rc.serial - скрипт конфигурации последовательных линий.
# Проверка прерываний
/sbin/setserial -W /dev/cua*
# Конфигурация последовательных устройств
/sbin/setserial /dev/cua0 auto irq skip test autoconfig
/sbin/setserial /dev/cua1 auto irq skip test autoconfig
/sbin/setserial /dev/cua2 auto irq skip test autoconfig
/sbin/setserial /dev/cua3 auto irq skip test autoconfig
# Отображение конфигурации последовательных устройств
/sbin/setserial -bg /dev/cua*

Если необходимо изменить настройки вашей последовательной карты, или команда setserial -bg показывает неверные параметры, вам, возможно, придется настроить их вручную, указав правильные значения. Например, для порта, где чип UART определяется как NSC 16450, но фактически это NSC 16550, следует выполнить следующую команду:

/sbin/setserial /dev/cua1 auto irq skip test autoconfig uart 16550

Если ваш модем поддерживает аппаратное рукопожатие, убедитесь, что вы его активировали. Большинство программ для связи по умолчанию не используют это. Необходимо настроить рукопожатие вручную, лучше всего в скрипте rc.serial с помощью команды stty:

$ stty crtscts < /dev/cua1
# Для проверки текущих настроек
$ stty -a < /dev/cua1

Эта команда покажет вам состояние всех флагов для данного устройства. Если флаг отображается со знаком минуса, как в -crtscts, это означает, что флаг отключен.