>>>Доброго времени суток.
>>>Проблема такая - подключаю внешний модем на cuaa0, даю команду `ppp`, в
>>>ней ввожу команду `term`, и при вводе команд (ATZ например) не
>>>вижу никакого отклика. При этом вот что в лог-файле появляется...
>>>
>>>Jul 21 15:35:25 freegate ppp[169]: tun0: Phase: deflink: opening -> carrier
>>>Jul 21 15:35:26 freegate ppp[169]: tun0: Phase: deflink: /dev/cuaa0 doesn't support CD
>>>
>>>Jul 21 15:35:26 freegate ppp[169]: tun0: Phase: deflink: carrier -> ready
>>>
>>>Полный лог и ppp.conf могу выслать директом, чтобы не захламлять форум. Естественно,
>>>если дать команду dial, то никто никуда не звонит, лампочки не
>>>мигают... Ответа от модема ВООБЩЕ нету. Мож, это надо ядро с
>>>поддержкой чего-то скомпилировать? Модем рабочий, порты не сгорели.
>>
>>
>>Можно вопрос а видео карта там есть? Если нет то куда системная
>>консоль смотрит?
>
>есть. полноценная машина
во-первых сообщение что не поддерживается CD (Carier Detect) - либо
в настройках мудема выставить &CD1, либо через инит-строку, во-вторых,
задолбали уже это галиматьей, мало того что НИЧЕГО сложно нет в serial
портах, еще и ВСЕ ЧТО НУЖНО описано не только в man'ах, но и в FAQ/Handbook!
Для тех кто ну совсем ни в зуб ногой (выдержка из письма):
Serial Ports: Com1/Com2 - устройства последовательного доступа.
Функциональность: Serial Mouse, Serial-console, Modem, PC via serial-port.
Соединение(Протокол): Serial Mouse (one of mouse protocol)
свой - урезанный набор сигналов, достаточно трех жил вроде.
Serial-console, PC, Null-modem: DTE <-> DTE, когда TX,RX перевернуты,
PC(DTE) <-> PC/Null/Console (DTE)
---------------------------------------
TX -------------\ /----------- TX
X
RX -------------/ \----------- RX
...
...
остальные сигналы...
суть проста DTE (Data Terminal Equipment) крестят передачу <-> прием, те
передача PC1 соединяется с приемом PC2 и приемник PC1, наоборот с передачей
PC2.
Serial-ports (DTE) <-> Modem (DCE) сигналы TX,RX <==> TX,RX
PC(DTE) <-> Modem (DCE)
---------------------------------------
TX --------------------------- TX
RX --------------------------- RX
...
...
остальные сигналы...
Придумки фирмы M$ разделяемости Com1/Com2 с Com3/Com4 в OS: MSDOS/Windows
- чистое измышление, устройства Com1 и Com2, стандартно имеют по одному
прерыванию и адресу и в нормальных системах наличие ВСЕГО ДВУХ РЕАЛЬНЫХ
последовательных портов Com1/Com2 не может быть интерпретировано как
наличие четырех последовательных устройств:
Com1+Com2 !== Com1[Com3]+Com2[Com4]
что отражают строки:
device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr
---------
две строки ниже, являются лишь примером как сконфигурировать ядро при
наличии еще двух портов, например внутренние модемы, которые на своей
карте имеют Com-port (UART) или доп.ISA карта с двумя COM портами которые
обычно на самой карте можно свитчами законфигурить на свободное или sharable
irq и c другими io-адресами:
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
но как видно из примера --------^^^^^^^^- данные порты задизейблены, чтобы
не вызвать возможного конфликта, те ЭТО ПРИМЕР.
Допустим у нас есть PC и 8-и портовая карта, например неинтеллктуевая, но
работающая с портами через один основной (интерфейсный) и через одно
прерывание за счет процессора, развязки, буферов и тд и тп, смотрим по
описанию возможный набор IRQ и io-addresses, настраиваем карту и ядро:
Вариант 1. (неудачный по сквозной адресации устройств cua*
ttyi*, ttyl*)
device sio0 at isa? port IO_COM1 irq 4
device sio1 at isa? port IO_COM2 irq 3
--
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
--
(как видим два порта вместе с ассоциированными устройствами из /dev
выпадут из сквозной нумерации)
device sio4 at isa? port 0x180 flags 0xb05
device sio5 at isa? port 0x188 flags 0xb05
device sio6 at isa? port 0x190 flags 0xb05
device sio7 at isa? port 0x198 flags 0xb05
device sio8 at isa? port 0x1a0 flags 0xb05
device sio9 at isa? port 0x1a8 flags 0xb05
device sio10 at isa? port 0x1b0 flags 0xb05
device sio11 at isa? port 0x1b8 flags 0xb05 irq 5
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- основной порт
через который работают все линии по прерывнию IRQ=5 и адресам 0x180...0x1b8
Прим. такое часто можно увидеть в чужих ядрах, потому как было лень удалить
sio2/sio3, все копировалось через cut/paste :)))
Вариант 2. (удачный в отношении порядка нумерации устройств)
device sio0 at isa? port IO_COM1 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? port 0x180 flags 0xb05
device sio3 at isa? port 0x188 flags 0xb05
device sio4 at isa? port 0x190 flags 0xb05
device sio5 at isa? port 0x198 flags 0xb05
device sio6 at isa? port 0x1a0 flags 0xb05
device sio7 at isa? port 0x1a8 flags 0xb05
device sio8 at isa? port 0x1b0 flags 0xb05
device sio9 at isa? port 0x1b8 flags 0xb05 irq 5
Прим.: IO_COM1[2,3,4] адреса io указанных портов, они стандартны и определены
в системе через #define макро-подстановки, значение "flags" формируется
в зависимости от многопортовой карты и высчитывается в соответствии с
`man sio`
Допустим мы сконфигурили многопортовку, ядро, пересобрали и перегрузились:
1. смотрим что обнаружило наше новое ядро:
пример 1(com1/com2):
[alone]~ > dmesg | grep "^sio"
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
[alone]~ > uname -a
FreeBSD alone.dubna.ru 4.2-STABLE FreeBSD 4.2-STABLE #0: Tue Feb 27 18:51:45 MSK
2001 toor@alone.dubna.ru:/usr/src/sys/compile/LAVR i386
[alone]~ >
если видим что ядро обнаружило ВСЕ наши serail-ports: sio0...N,
идем дальше.
2. смотрим созданы ли у нас необходимые устройства из /dev :
ls -la /dev/cua*
ls -la /dev/ttyi*
ls -la /dev/ttyl*
ls -la /dev/ttyd*
по умолчанию при установке системы в /dev имеется необходимый и достаточный
набор устройств для работы:
cd /dev ; ./MAKEDEV std (создать стандартный набор устройств)
cd /dev ; ./MAKEDEV all (создать все известные устройства)
вырезка из /dev/MAKEDEV:
# Terminal ports:
# tty* general purpose serial ports
# cua* dialout serial ports
# ttyA* Specialix SI/XIO dialin ports ('*' = number of devices)
# cuaA* Specialix SI/XIO dialout ports
# ttyD* Digiboard - 16 dialin ports
# cuaD* Digiboard - 16 dialout ports
# ttyR* Rocketport dialin ports
# cuaR* Rocketport dialout ports
для создания необходимых терминальных устройств.
Терминальные устройства в Unix'ах разделялись на входные и выходные,
в отношении модемов на порту:
- dialin (входные, отвечающие на звонок)
- dialout (звонящие сами)
технология уходит в глубь истории Unix'es, двух ветвей BSD & SystemV и разной
работы с портами, при dialin на порту должен висеть демон и слушать появилось
ли что-то в порту и если да то производить необходимую реакцию, похожая
ситуация с виртуальными консолями:
- dialin devices
[unix1]~ > ps -axuw | grep getty
root 90405 0.0 0.5 1060 648 p0 S+ 6:17пп 0:00.00 grep getty
root 465 0.0 0.2 932 272 v0 Is+ 4апр01 0:00.01 /usr/libexec/get
ty Pc ttyv0
root 467 0.0 0.0 928 0 v2 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv2
root 468 0.0 0.0 928 0 v3 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv3
root 469 0.0 0.0 928 0 v4 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv4
root 470 0.0 0.0 928 0 v5 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv5
root 471 0.0 0.0 928 0 v6 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv6
root 472 0.0 0.0 928 0 v7 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv7
root 473 0.0 0.0 928 0 v8 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv8
root 474 0.0 0.0 928 0 v9 IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyv9
root 475 0.0 0.0 928 0 va IWs+ - 0:00.00 /usr/libexec/get
ty Pc ttyva
включая dialin порты /dev/ttyd*:
[kastor]~ > ps -axuw | grep getty
root 335 0.0 0.7 936 416 v0 Is+ 13апр01 0:00.02 /usr/libexec/get
ty Pc ttyv0
root 337 0.0 0.7 932 396 v2 Is+ 13апр01 0:00.01 /usr/libexec/get
ty Pc ttyv2
root 338 0.0 0.7 932 396 v3 Is+ 13апр01 0:00.01 /usr/libexec/get
ty Pc ttyv3
root 339 0.0 0.7 932 396 v4 Is+ 13апр01 0:00.01 /usr/libexec/get
ty Pc ttyv4
root 340 0.0 0.7 932 396 v5 Is+ 13апр01 0:00.01 /usr/libexec/get
ty Pc ttyv5
root 341 0.0 0.7 932 396 v6 Is+ 13апр01 0:00.01 /usr/libexec/get
ty Pc ttyv6
root 342 0.0 0.7 932 396 v7 Is+ 13апр01 0:00.01 /usr/libexec/get
ty Pc ttyv7
вот они, ниже:
root 75321 0.0 0.8 928 500 ?? I 6:13пп 0:00.01 /usr/libexec/get
ty std.57600 ttyd8
root 75330 0.0 0.8 928 500 ?? I 6:14пп 0:00.01 /usr/libexec/get
ty std.57600 ttyd7
root 75352 0.0 0.8 928 500 ?? I 6:15пп 0:00.01 /usr/libexec/get
ty std.57600 ttyd9
root 75368 0.0 0.8 928 500 ?? I 6:16пп 0:00.01 /usr/libexec/get
ty std.57600 ttyd5
root 75456 0.0 0.8 928 500 ?? I 6:29пп 0:00.01 /usr/libexec/get
ty std.57600 ttyd4
lavr 75495 0.0 0.9 1064 568 p3 S+ 6:40пп 0:00.01 grep getty
аналогично и для serial-ports, например mgetty.
- dialout devices имеют отличную от dialin технологию, ибо здесь с нашей
стороны единоразово открывается порт для работы, cu/ppp для дозвонки от
нас, в отличие от dialin - к нам.
Как было описано выше, для создания дополнительных устройств dialin/dialout,
в случае подключения доп.портов необходимо выполнить:
cd /dev ; ./MAKEDEV cuaa4; ./MAKEDEV cuaa5; ...;./MAKEDEV cuaa9
cd /dev ; ./MAKEDEV cuai4; ./MAKEDEV cuai5; ...;./MAKEDEV cuai9
...
cd /dev ; ./MAKEDEV ttyd4; ./MAKEDEV ttyd5; ...;./MAKEDEV ttyd9
учитывая некоторые изменения в названиях устройств в зависимости от драйвера
подключенного устройства.
Названия из стандартных устройств, выдержка из `man sio`:
- dialin:
/dev/ttyd? for callin ports
/dev/ttyid?
/dev/ttyld? corresponding callin initial-state and lock-state devices
- dialout:
/dev/cuaa? for callout ports
/dev/cuaia?
/dev/cuala? corresponding callout initial-state and lock-state devices
Необходимо помнить что устройство mouse может быть не PS/2, а serial-mouse
и подключено на один из портов com1 or com2, чтобы случайно не открыть
в параллель мышиный порт, а то он загасит мышь в X'ах.
После создания устройств для каждого последовательного порта, можно легко
проверить работает он или нет, подключаем модем и открываем с помощью
утилиты `cu` порт как dialout, но прежде, чтобы не вспоминать и не смотреть
куда у нас подключена мышь(если она serial):
[alone]~ > ls -la /dev/cua*
crw-rw---- 1 uucp dialer 28, 128 Apr 6 14:54 /dev/cuaa0
^^^^^^^- major & minor for COM1
crw-rw---- 1 uucp dialer 28, 129 Mar 26 17:25 /dev/cuaa1
crw-rw---- 1 uucp dialer 28, 130 Feb 27 18:03 /dev/cuaa2
crw-rw---- 1 uucp dialer 28, 131 Feb 27 18:03 /dev/cuaa3
crw-rw---- 1 uucp dialer 28, 160 Feb 27 18:03 /dev/cuaia0
crw-rw---- 1 uucp dialer 28, 161 Feb 27 18:03 /dev/cuaia1
crw-rw---- 1 uucp dialer 28, 162 Feb 27 18:03 /dev/cuaia2
crw-rw---- 1 uucp dialer 28, 163 Feb 27 18:03 /dev/cuaia3
crw-rw---- 1 uucp dialer 28, 192 Feb 27 18:03 /dev/cuala0
crw-rw---- 1 uucp dialer 28, 193 Feb 27 18:03 /dev/cuala1
crw-rw---- 1 uucp dialer 28, 194 Feb 27 18:03 /dev/cuala2
crw-rw---- 1 uucp dialer 28, 195 Feb 27 18:03 /dev/cuala3
[alone]~ > ls -la /dev/mouse
lrwxr-xr-x 1 root wheel 13 Jun 22 2000 /dev/mouse -> /dev/sysmouse
[alone]~ > ls -la /dev/sysmouse
crw------- 1 root wheel 12, 128 Feb 27 18:03 /dev/sysmouse
^^^^^^^- major и minor как у /dev/cuaa0 [com1]
итак, serial-mouse висит на COM1, тогда вешаем модем на порт COM2
и запускаем `cu`:
[alone]~ > cu -s38400 -l/dev/cuaa1
Connected.
ati3
U.S. Robotics Sportster 56000 Voice V4.5.1
OK
~[alone].
Disconnected.
[alone]~ >
уилита `cu` запускается из под root'а или пользователя которому разрешено
читать-писать в устройства dialout, выше видно что by-default для устройств
dialout uid/gid==uucp/dialer, также необходимо быть внимательным для dialin
- там владельцем будет или root или пользователь PPP (зависит от того как
настроено PPP)
Выход из утилиты `cu`: ввести символ "~" и когда появиться приглашение
[hostname] ввести символ "."
Можно еще и таким макаром посмотреть работает порт, подсоединить модем,
например на COM2 и затем из под root'а выполнить:
[alone]~ > cat > /dev/cuaa1
asdjkfhjkaslfh
asfhjlk
^C
[alone]~ >
Модем должен что-то проморгать.
Итак, допустим мы проверили все порты, теперь необходимо сделать так чтобы
getty открыл все необходимые нам порты и слушал входящие порты:
cd /etc
vi ttys
<вырезка из /etc/ttys>
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyd0 "/usr/libexec/getty std.57600" dialup off secure
ttyd1 "/usr/libexec/getty std.57600" dialup off secure
ttyd2 "/usr/libexec/getty std.9600" dialup off secure
ttyd3 "/usr/libexec/getty std.9600" dialup off secure
ttyd4 "/usr/libexec/getty std.57600" dialup on secure
ttyd5 "/usr/libexec/getty std.57600" dialup on secure
ttyd6 "/usr/libexec/getty std.57600" dialup on secure
ttyd7 "/usr/libexec/getty std.57600" dialup on secure
ttyd8 "/usr/libexec/getty std.57600" dialup on secure
ttyd9 "/usr/libexec/getty std.57600" dialup on secure
ttyda "/usr/libexec/getty std.57600" dialup on secure
ttydb "/usr/libexec/getty std.57600" dialup on secure
# Pseudo terminals
ttyp0 none network
Видим что первые четыре порта не являются dialin:
ttyd0 "/usr/libexec/getty std.57600" dialup off secure
^^^
а начиная с порта ttyd4:
ttyd4 "/usr/libexec/getty std.57600" dialup on secure
getty открывает порт ttyd4 и связанный с этим устройством соответствующий
serial-port на скорости 57600 и с параметрами соответствующими описаню из
/etc/gettytab:
std.57600|57600-baud:\
:np:sp#57600:
После изменений в ttys, необходимо проинициализировать порты:
выдаем сигнал SIGHUB init'у, который есть первый процесс в системе, те:
`kill -HUP 1`, после чего у нас getty откроет наши порты и будет их
слушать.
Ньюанс: перед kill -HUP 1, необходимо подсоединить модемы к портам иначе
посыпяться сообщения о невозможности инициализации портов или что с них
сыпется какой-то мусор (так называемый дребез на пустых портах) и завалит
сообщениями console или /var/log/...)
Теперь можем позвонить на модем подключенный к phone-line и услышим ответ,
или если с другого модема, то увидим приглашение:
login: ...
Все, теперь можно настраивать PPP.
Почти так же при работе через mgetty, только у нее своя конфигурация имеется
и в /etc/ttys `getty` необходимо будет заменить на `mgetty`.
Примечание: я писал по памяти по-скольку провайдеры уже сто лет как имеют
модемные пулы на cisco'ах, а авторизация происходит через tacacs/tacacs+
или radius, у кого на чем реализовано.
Вобщем все тривиально и просто, вот только живы порты на карте или нет,
раньше все в MSDOS проверяли через какую-нить терминалку:
telemate/telix/...
ну или запуская какой-нить modem-doctor... Давно это все было, главная морока
была если у порта сгорел лишь один приемник или передатчик, тогда порт
наполовину жил и не сразу можно было понять что он полу-умер, но со временем
к этому привыкаешь и отслеживается быстро.
Тонкости: бывает что залипают порты, бывает что после определенного upgrade'а
необходимо по новой сделать MAKEDEV порты ибо сменились major/minor для
устройства и тд и тп.
Origin: "A Place for Everithing and Everything In Its Place."
Best regards,
--
lavr / Andrey Lavrentyev