18.01.1999, | |
Чего pppd не хватает в ядре FreeBSD для полного счастья ?
| |
Прежде всего, в ядре необходима поддержка хотя бы одного устройства ppp. В ядре FreeBSD 2.2.7 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.
Два первых порта - COM1 с прерыванием 4 и COM2 с прерываением 3 - активны,
а два оставшихся - COM3 с прерыванием 5 и COM4 с прерыванием 9 - не активны.
Активизировать их и при необходимости поменять номера прерываний можно
во время загрузки системы. Для этого в ответ на приглашение
"boot:" нужно
Прикладные программы общаются с последовательными портами через устройства /dev/ttyd# и /dev/cuaa#. Партия в лице man sio учит нас, что устройства ttyd# используется для входящих звонков, тогда как cuaa# для исходящих. На самом же деле, cuaa# может с успехом использоваться и для входящих звонков, что демонстрируется mgetty, а pppd умеет звонить и по ttyd#. Тем не менее, для исходящих звонков мы будем использовать только cuaa#. Основное отличие ttyd# от cuaa# состоит в том, что когда какой-либо процесс хочет открыть устройство ttyd#, происходит следующее. Этот процесс блокируется и ядро проверяет, не использует ли устройство sio# кем-то другим. После того, как другой процесс освободит устройство sio#, ядро захватывает устройство ttyd# для первого процесса. Этот процесс находится в заблокированном состоянии до тех пор, пока в последовательном порту не будет активен сигнал DCD, или, говоря по-русски, пока модемы не соединятся. После этого процесс просыпается и может писать в устройство и читать из него. Заметим, что пока этот процесс заблокирован, другие процессы могут использовать устройство cuaa# для установления соединения. В этом случае, хотя сигнал DCD будет активен, первый процесс все равно будет заблокирован. |