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

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

Сценарии загрузки для последовательных портов

По умолчанию сценарии для setserial находятся в файле /etc/rc.d/rc.setserial. В большинство версий ОС Linux входит обобщенная версия этого сценария, которую затем можно конфигурировать под определенный сервер. В этом сценарии имеется много строк для специфических ситуаций, таких как, например, мультипортовые платы и специальные модемные платы. В листинге 3.6 показан пример сценария из файла rc.serial.

1 STD_FLAGS="session_lockout"
2 SETSERIAL=/sbin/setserial
3 WILD=false
4 SUMMARY=true
5
6 echo -n "Configuring serial ports...."
8 #################################################
9 #
10 # AUTOMATIC CONFIGURATION
11 #
12 # Uncomment the appropriate lines below to enable
13 # auto-configuration of a particular board.
14 #Or comment them out to disable them....
15 ################################################
16
17 # Do AUTOMATIC_IRQ probing
18 #
19 AUTO_IRQ=auto_irq
20
21 # These are the standard COM1 through COM4 devices
22 #
23 SetSerial /dev/ttyS0 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS}
24 SetSerial /dev/ttyS1 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS}
25 SetSerial /dev/ttyS2 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS}
26 SetSerial /dev/ttyS3 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
27
28 ###################################################
29 #
30 # MANUAL CONFIGURATION
31 #
32 # If you want to do manual configuration of one
33 # or more of your serial ports, uncomment
34 #and modify the relevant lines.
35 #
36 ###################################################
37
38 # These are the stahdard COM1 through COM4 devices
39 #
40 #SetSerial /dev/ttyS0 uart 16450 port 0x3F8 irq 4 ${STD_FLAGS}
41 #SetSerial /dev/ttyS1 uart 16450 port 0x2F8 irq 3 ${STD_FLAGS}
42 #SetSerial /dev/ttyS2 uart 16450 port 0x3E8 irq 4 ${STD_FLAGS}
43 #SetSerial /dev/ttyS3 uart 16450 port 0x2E8 irq 3 ${STD_FLASS}
44
45 echo "done."
46 ##################################################
47 #
48 # Print the results of the serial configuration process
49 #
50 ##################################################
51
52 if [ -n "$SUMMARY" ]; then
53 SetSerlal -bg /dev/ttyS?
54
55 if [ '/dev/ttyS??' != /dev/ttyS?? ]; then
56 SetSerial -bg /dev/ttyS??
57 fi
58 fi
Листинг 3.6. Фрагмент сценария из /etc/rc.d/rc.serial

Итак, в листинге 3.6 в строках с 23 по 26 команда setserial пытается автоматически обнаружить и сконфигурировать четыре последовательных порта на сервере. Если по каким-либо причинам вы не желаете, чтобы производилось автоматическое обнаружение портов, просто закомментируйте эти строки и уберите знаки комментария со строк 39–42. В этих строках команде setserial указывается использовать специальное прерывание IRQ и адрес ввода-вывода для каждого последовательного порта. Если же в системе используется модем с нестандартными номером прерывания IRQ и адресами ввода-вывода, то можно установить соответствующие параметры в команде setserial.

Конфигурирование модемов в ОС Linux

На сегодняшний день на рынке предлагается огромное количество различных модемов, которые могут работать с ОС Linux. Однако следует проявить осторожность, так как довольно много модемов пока не могут работать с этой операционной системой. Выбирая модем, помните, что вы балансируете между гладкой и быстрой его установкой и ночным кошмаром для администратора. В этом разделе мы постараемся описать, на что необходимо обращать внимание при покупке нового модема или при попытке установить в ОС Linux один из модемов, который достался вам в наследство от умершей бабушки.

Внешние модемы

В ОС Linux лучше всего использовать стандартные внешние модемы. Модемы этого типа подключаются к серверу на базе ОС Linux через последовательный СОМ-порт посредством стандартного 9- или 25-контактного модемного кабеля, который можно приобрести в любом компьютерном магазине. На момент выхода курса текущим стандартом для модемов является протокол V.90, который позволяет работать модемам на скорости 56 Кбит/с. К сожалению, в реальных условиях эта скорость достигается очень редко. Скорость 56 Кбит/с достигается применением специальных алгоритмов сжатия данных и модуляции сигналов. В обычных линиях связи, предназначенных для передачи речи, качество сигнала недостаточно для работы на таких высоких скоростях. Поэтому модемы, рассчитанные на 56 Кбит/с, работают обычно на скорости 38,4 Кбит/с. Тем не менее использование протокола V.90 оправдано хотя бы с точки зрения использования его возможностей по коррекции ошибок.

Если используются высокоскоростные модемы, то с помощью внутренних регистров модема можно установить скорость его работы. Если скорость не определена, модем пытается соединиться с сервером на той же скорости, что и удаленный модем, которая, однако, может варьироваться. Это зависит от качества конкретной телефонной линии и удаленного модема. Установив скорость обмена модема с портом 115200 бит/с, можно настроить последовательный порт в ОС Linux со стандартными параметрами. Об этом более подробно далее в этой лекции.

Внутренние модемы

Внутренние модемы намного сложнее в работе по сравнению со своими внешними собратьями. В использовании внутренних модемов с операционной системой Linux имеется много "подводных камней". Во-первых, следует напрочь избегать модемов, маркированных как WinModem или совместимых с ними. Эти модемы специально разработаны для использования с операционными системами Microsoft Windows 95 и 98. В комплект их поставки не входит стандартный аппаратный интерфейс и, соответственно, они не будут работать с ОС Linux. Их принцип работы основан на специальном программном обеспечении, адаптированном для среды Windows 95-98.

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

А пока, если в системе имеется модем на шине PCI, можно попытаться заставить его работать с Linux вручную. В процессе загрузки системы параметры устройств на шине PCI отображаются базовой системой ввода-вывода BIOS. Посмотрите, какое прерывание назначается во время загрузки вашему модему, и вручную запустите программу setserial с соответствующим значением прерывания. Хотя этот метод и не совсем корректен, он должен сработать.

Обычные внутренние модемы, предназначенные для работы с шиной ISA, работают с ОС Linux вполне нормально. Чаще всего у них имеется набор перемычек для установки их на определенный СОМ-порт. Помните, что не следует использовать СОМ-порт, который уже используется в качестве внешнего порта. Также будьте осторожны, если к этому же последовательному порту подключены другие устройства. Все они могут быть восприняты как модем на одном и том же порту. Довольно часто можно столкнуться с тем, что на порту СОМ1 имеется устройство-указатель (манипулятор "мышь"). Помните, что порт СОМ1 использует то же прерывание, что и порт СОМ3 (см. табл. 3.3). Если установить внутренний модем на порт СОМ3, то вполне можно лишиться мыши, так как вы не сможете одновременно использовать их на одном и том же прерывании. Чтобы избежать этого конфликта, поставьте модем на порт СОМ4. Конечно, если на порту СОМ2 уже имеется какое-либо устройство, то это не решение проблемы. Все эти проблемы подводят вас к использованию нестандартной конфигурации для последовательных портов. Вам нужно подобрать прерывание, которое не используется никакими другими устройствами в системе. Для этой цели в большинстве случаев подходят прерывания 9, 10 и 11.

Григорий Дроздов
Григорий Дроздов
Россия, Санкт-Петербург, Санкт-Петербургский гуманитарный университет профсоюзов, 2006