Порт ввода-вывода - это способ передать данные в/из компьютера. Имеются множество типов портов ввода-вывода типа последовательных портов, параллельных портов, контроллеров дисковода, плат локальной сети ethernet и т.д. Мы будем иметь дело с последовательными портами, так как модемы и терминалы - последовательные устройства. Каждый последовательный порт должен иметь адрес ввода-вывода и прерывание (IRQ). Имеются четыре последовательных порта, соответствующие COM1 - COM4:
ttyS0 (COM1) address 0x3f8 IRQ 4
ttyS1 (COM2) address 0x2f8 IRQ 3
ttyS2 (COM3) address 0x3e8 IRQ 4
ttyS3 (COM4) address 0x2e8 IRQ 3
Если Linux не обнаруживает последовательные порты при загрузке, то
удостоверьтесь, что поддержка последовательных устройств разрешена и
вкомпилирована в ядро. В этом документе, я обращаюсь к COM1 как ttyS0, COM2
как ttyS1, COM3 как ttyS2, и COM4 как ttyS3. Обратите внимание, что по
умолчанию эти устройства имеют перекрывающиеся IRQ. Вы не можете использовать
все порты с этими значениями по умолчанию, и вы должны переназначить другие
IRQ. См. раздел ``Я могу использовать более, чем два последовательных
устройства?" при установке IRQ.
На некоторых инсталляциях, будут созданы два дополнительных устройства, /dev/modem для вашего модема и /dev/mouse для вашей мыши. Оба из них - символические связи с соответствующими устройствами в /dev, которые вы определили при установке (если у вас bus mouse, то /dev/mouse укажет на устройство bus mouse).
В отношении /dev/mouse и /dev/modem ведутся споры. Я строго против использования этих связей. В частности, если вы планируете использовать ваш модем для приема входящих звонков, то вы можете столкнуться с проблемами, потому что файлы блокировки не могут работать правильно, если вы используете /dev/modem. Используйте эту связь, если это вам нравится, но удостоверьтесь, что она указывает на правильное устройство. Однако, если вы измените или удалите эту связь, то некоторые приложения (minicom, например) могу потребовать перенастройки.
Каждое устройство ttyS имеет соответствующее устройство cua. Велись некоторые разговоры об отмене cua, так что возможно самое лучшее - это использовать ttyS. Основное различие между cua и ttyS - то, что для обычной команды "open" (без каких-либо флажков) в прикладной программе, cua откроет порт, даже если сигналы управления модема (типа DCD) просят этого не делать.
(Чтобы проверить сигналы управления модема должен быть установлен stty.) Порт ttyS отказался бы открываться в этом случае, но его можно принудительно открыть, задавая некоторые флажки в команде "open".
Таким образом порт ttyS может делать все, что может порт cua. За исключением того, что результаты "принудительного" открытия in read statements in the program работают по-другому, но программисты могут обойти это, изменяя свои программы. Удаление cua привело бы Linux в большее соответствие с Posix стандартом и решило бы некоторые проблемы с файлами блокировки.
/dev/ttyS0 major 4, minor 64 /dev/cua0 major 5, minor 64
/dev/ttyS1 major 4, minor 65 /dev/cua1 major 5, minor 65
/dev/ttyS2 major 4, minor 66 /dev/cua2 major 5, minor 66
/dev/ttyS3 major 4, minor 67 /dev/cua3 major 5, minor 67
Обратите внимание, что все дистрибутивы должны приходить с этими устройствами,
уже правильно установленными (если cua не отменен). Вы можете проверить это,
напечатав:
linux% ls -l /dev/cua* linux% ls -l /dev/ttyS*
Если у вас нет устройства, то вы должны будете создать его командой mknod. Например, предположим, что вам нужно создать устройство ttyS0:
linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 4 64
Вы можете использовать скрипт MAKEDEV, который лежит в /dev. Он упрощает
создание устройств. Например, если вам нужно создать устройств ttyS0, то
вы напечатаете:
linux# cd /dev
linux# ./MAKEDEV ttyS0
Эти строки создают устройства для входящих и исходящих устройств
и должны установить правильные права доступа.
Использование ваших многопортовых плат зависит от того какая плата у вас есть. Некоторые из них перечислены подробно в rc.serial или в 0setserial, который приходит с пакетом setserial. Я строго рекомендую взять последнюю версию setserial, если вы пытаетесь использовать многопортовые платы. Вероятно, вы должны будете создать эти устройства.
Используйте или команду mknod, или скрипт MAKEDEV. Устройства для многопортовых плат создаются сложением ``64 + номер_порта". Так, если вы хотели создать устройство ttyS17, то напечатайте:
linux# mknod -m 666 /dev/cua17 c 5 81
linux# mknod -m 666 /dev/ttyS17 c 4 81
Обратите внимание, что ``64 + 17 = 81". При использовании скрипта MAKEDEV, вы
должны ввести:
linux# cd /dev
linux# ./MAKEDEV ttyS17
Обратите внимание: руководство SIIG для IO1812 распечатывает для COM5-COM8
неправильные значения.
Они должны быть COM5 = 0x250, COM6 = 0x258, COM7 = 0x260 и COM8 = 0x268.
Обратите внимание: Digi PC/8 Interrupt Status Register - в 0x140.
Обратите внимание: для AST Fourport, вам возможно потребуется указать skip_test в rc.serial.
Читайте информацию, которая приходит с драйвером. Эти платы используют специальные устройства и нестандартные. Эта информация изменяется в зависимости от ваших аппаратных средств.