FAQ FreeBSD
Страница 56. Порты


11. Порты 

11.1. Как узнать, какие последовательные порты были обнаружены FreeBSD?

При загрузке ядра FreeBSD оно будет пытаться найти последовательные порты, с
поддержкой которых было откомпилировано. Вы можете повнимательней присмотреться
к выдаваемым сообщениям либо выполнить команду
    % dmesg | grep sio

после загрузки и запуска системы.
Вот пример вывода указанной команды:
    sio0 at 0x3f8-0x3ff irq 4 on isa
    sio0: type 16550A
    sio1 at 0x2f8-0x2ff irq 3 on isa
    sio1: type 16550A

Здесь присутствуют два последовательных порта. Первый использует irq 4, порт вв
ода/вывода 0x3f8 и построен на микросхеме UART типа 16550A. Второй использует
тот же тип микросхемы, но использует irq 3 и адрес порта ввода/вывода 0x2f8. В
нутренние модемы выглядят точно также, как последовательные порты, за
исключением того, что к модем ним "подключен" всегда.
В ядро GENERIC встроена поддержка двух последовательных портов, с irq и
адресами портов ввода/вывода, как в примере выше. Если эти настройки не соотв
етствуют вашим, или если вы добавили внутренние модемы, или у вас больше
последовательных портов, чем описано в ядре, просто переконфигурируйте ядро. За
дополнительной информацией обратитесь к разделу о построении ядра.

11.2. Как узнать, какие внутренние модемы были обнаружены FreeBSD?

Посмотрите ответ на предыдущий вопрос.

11.3. Я только что поставил 2.0.5 и не нашёл устройств tty0X!

Не волнуйтесь, просто они были объединены с устройствами ttydX. Вам придётся
подправить конфигурационные файлы, которые вы раньше использовали.

11.4. Как осуществляется доступ к последовательным портам во FreeBSD?

Третий последовательный порт, sio2 (который в DOS называется COM3), называется
/dev/cuaa2 для устройств, выполняющих исходящие звонки, и /dev/ttyd2 для
устройств, принимающих входящие звонки. Какая разница между этими двумя
классами устройств?
Вы должны использовать ttydX для входящих соединений. При открытии /dev/ttydX в
блокирующем режиме, процесс будет ожидать неактивности соответствующего
устройства cuaaX, а затем появления сигнала о наличии несущей. При открытии
устройства cuaaX, он проверяет, что последовательный порт не используется уже
устройством ttydX. Если порт доступен, он "похищает" его у устройства ttydX.
Также устройство cuaXX не следит за наличием несущей. С такой схемой работы и
модемом, находящимся в режиме автоответа, вы можете позволить пользователям в
ходить в систему и в то же время можете осуществлять исходящие звонки, а
система позаботится о возможных конфликтах.

11.5. Как включить поддержку многопортовых последовательных адаптеров?

Повторим ещё раз: информация о конфигурировании ядра содержится в разделе, посв
ящённом этому вопросу. Для многопортовых последовательных адаптеров в файле
конфигурации ядра поместите ключевое слово sio для каждого порта на адаптере.
Но irq и вектор должен быть указан только у одного порта. Все порты на адаптере
должны использовать одно и то же irq. Используйте последний последовательный
порт для указания irq. Также включите опцию COM_MULTIPORT.
В следующем примере дано описание 4-портового адаптер AST на irq 7:
    options "COM_MULTIPORT"
    device sio4 at isa? port 0x2a0 tty flags 0x781
    device sio5 at isa? port 0x2a8 tty flags 0x781
    device sio6 at isa? port 0x2b0 tty flags 0x781
    device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr

Флаги указывают, что управляющий порт имеет младший номер устройства 7 (0x700),
включена диагностика на время обнаружения (0x080), и все порты используют одно
и то же irq (0x001).

11.6. Может ли FreeBSD использовать несколько многопортовых адаптеров с одинаковым irq?

Пока нет. Вы должны назначить уникальный irq для каждого адаптера.

11.7. Можно ли установить режим работы по умолчанию для порта?

Вашему приложению может понадобиться открыть устройства ttydX (или cuaaX).
Когда процесс открывает устройство, оно имеет набор параметров ввода/вывода. Вы
можете посмотреть их значения командой
    # stty -a -f /dev/ttyd1

Когда вы меняете настройки этого устройства, они действуют вплоть до закрытия
устройства. При повторном открытии оно будут иметь режимы работы по умолчанию.
Чтобы изменить значения режимов работы по умолчанию, вы можете открыть и
изменить настройки в устройстве "начального состояния". Например, чтобы сделать
режимом по умолчанию режим CLOCAL, 8 бит, и управление потоком XON/XOFF для
устройства ttyd5, сделайте следующее:
    # stty -f /dev/ttyid5 clocal cs8 ixon ixoff

Для выполнения таких действий предназначен скрипт /etc/rc.serial. Теперь при
открытии устройства ttyd5 приложение будет иметь именно такой режим работы с
портом. Оно, однако. может изменить эти режимы по своему усмотрению.
Вы можете запретить изменение приложением некоторых режимов работы, выполнив
настройки устройства "постоянного состояния". Например, чтобы сделать скорость
работы ttyd5 постоянной и равной 57600 bps, выполните
    # stty -f /dev/ttyld5 57600

Теперь, если приложение откроет ttyd5 и попытается изменить скорость работы
порта, она всё равно останется равной 57600 bps.
Естественно, вы должны сделать устройства начального и постоянного состояний
доступными на запись только пользователю root. Скрипт MAKEDEV при создании
файлов устройств этого НЕ делает.

 
« Предыдущая статья