Чего pppd не хватает в ядре FreeBSD для полного счастья ? 18.01.1999
Прежде всего, в ядре необходима поддержка хотя бы одного
устройства ppp .
В ядре FreeBSD GENERIC , которое
устанавливается на новую систему, одно устройство ppp
присутствует.
Если Вы планируете запускать одновременно несколько процессов
pppd, то для каждого из них необходимо своё устройство.
В файле конфигурации ядра число устройств ppp
задаётся так:
pseudo-device ppp 4
В данном примере ядро поддерживает до 4 одновременных процессов
pppd.
Кроме того, поскольку pppd будет общаться с модемами
через последовательные порты, необходимо, чтобы в ядре были
устройства этих последовательных портов sio0 ,
sio1 и так далее, ровно столько, сколько у Вас их есть.
В файле конфигурации ядра они задаются так:
device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr
device sio2 at isa? disable port "IO_COM3" tty irq 5 vector siointr
device sio3 at isa? disable port "IO_COM4" tty irq 9 vector siointr
Именно так сконфигурированы последовательные порты в
ядре GENERIC FreeBSD-2.2.7.
Два первых порта COM1 с прерыванием 4 и COM2
с прерыванием 3 активны,
а два оставшихся COM3 с прерыванием 5 и COM4
с прерыванием 9 не активны.
Активизировать их и при необходимости поменять номера прерываний можно
во время загрузки системы. Для этого в ответ на приглашение
"boot: " нужно набрать -c .
Имейте ввиду, что для всех портов необходимы разные прерывания.
Одновременно работать два порта с одним прерыванием не смогут.
Впрочем, даже если Вам достаточно одного устройства, всё равно
рекомендуется пересобрать ядро. О том, зачем это нужно делать
и как это делается, Вы можете прочитать по-английски в FreeBSD
Handbook или по-русски на
странице Ивана Паскаля.
Прикладные программы общаются с последовательными портами через
устройства /dev/ttyd# и /dev/cuaa# .
Партия в лице man sio учит нас, что устройства
ttyd# используется для входящих звонков,
тогда как cuaa# для исходящих.
На самом же деле, cuaa# может с успехом
использоваться и для входящих звонков, что
демонстрируется mgetty ,
а pppd умеет звонить и по ttyd# .
Тем не менее, для исходящих звонков мы будем использовать только
cuaa# .
Основное отличие ttyd# от cuaa# состоит
в том, что когда какой-либо процесс хочет открыть устройство
ttyd# , происходит следующее.
Этот процесс блокируется и ядро проверяет,
не используется ли устройство sio# кем-то другим.
После того, как другой процесс освободит
устройство sio# , ядро захватывает устройство
ttyd# для первого процесса.
Этот процесс находится в заблокированном состоянии до тех пор,
пока в последовательном порту не будет активен сигнал
DCD, или, говоря по-русски, пока модемы не соединятся.
После этого процесс просыпается
и может писать в устройство и читать из него.
Заметим, что пока этот процесс заблокирован, другие процессы
могут использовать устройство cuaa# для установления
соединения.
В этом случае, хотя сигнал DCD будет активен,
первый процесс все равно будет заблокирован.
(C) Игорь Сысоев http://sysoev.ru |