:: Инсталляция и настройка ZyXEL OMNI ADSL
USB под ОС Linux
Автор: Kernel-msk
Итак, начнем. Первое:
Сбор сведений о модеме
90% секретной информации находится в открытых исходниках.
У меня имелся настроенный доступ в Интернет под Windows XP.
Была получена следующая информация:
Модем в Windows XP (System Info) определялся как Alcatel
Telecom DinaMiTe modem, c PID = 0xa5a5 и VID =0x06b9.
В системе он представлен в виде сетевой карты с названием
(RFC1483 mode). Т.е. Драйвер модема моделирует сетевую
карту:
TCP/IP настроен на использование статического IP адреса.
Забыл картинку сделать. Но тут надо подключить воображение.
У Вас все получиться.
IP адрес, маска подсети и ip адрес шлюза получены. Адреса
DNS серверов записаны.
Различные параметры относящиеся к модему записаны в
текстовый файл.
Файлы firmware (Fw-usb.bin, init-usb.bin) на всякий случай
загружены.
Все сложено на USB flash drive. Все готово к dive into Linux.
Перезагрузка. Lilu. Linux. Bash. root. rm -rf / :-)
Поехали.
Исходная конфигурация
Компьютер с usb портами. Да, ничего специального не
требуется, просто c usb портами.
Вновь установленная система Mandrake 10 Offical Discovery с
ядром 2.6.3-7mdk. Именно с этим ядром, мы же не хотим
парится.
Установка требуемых rpm пакетов
Для нашего простого случая (RFC1483 routed) требуется не так
много библиотек и все они идут в поставке Mandrake 10, вот
повезло.
Если ставим бинарный rpm (только скомпилированные драйвер и
скрипты) то требуются только следующие пакеты:
libusb0.1_4-0.1.7-1mdk.rpm - библиотека доступа к USB
устройствам
libpcap0-0.8.1-1mdk.rpm - packet capture библиотека
liblinux-atm1-2.4.1-3mdk.rpm - библиотеки поддержки ATM в
Linux
linux-atm-2.4.1-3mdk.prm - поддержка ATM в Linux
Если собираемся компилировать(а это придется рано или
поздно) и всякие другие развлечения, то дополнительно ставим
пакеты разработчика.
kernel-source-2.6.3-7mdk.rpm или исходные коды ядер серии
2.6.
libusb0.1_4-devel-0.1.7-1mdk.rpm - заголовочные файлы для
разработки
liblinux-atm1-devel-2.4.1-3mdk.rpm - файлы разработчика
Linux ATM API
Как найти библиотеки? Запускаем менеджер rpmdrake. В поле
поиска задаем сокращенные названия: kernel-source или libusb
и т.д.
Если не находите, посмотрите, может они уже установлены. Для
этого запустите режим удаления пакетов, но не удаляйте, что
Вы прямо как маленькие.
А да забыл, делать все вышенабитое надо с бюджетом root"a,
не экономьте, дело стоящее.
Установка пакета amedyn_spb (специальная редакция для
питерчан).
Получаем rpm пакет драйвера с моей уютной домашней
странички: .http://www.dzhi.sp.ru/drivers/amedyn_spb-2004-08-01.k2.6.3-7mdk.i686.rpm
Эх, хорошо иметь домик .в деревне.. Если проблемы с типом
процессора, скажите, перекомпилю, просто не помню
пересобирал ли я ядро.
Настраиваем в менеджере источников программ (rpmdrake), путь
к месту где деньги лежат (будут лежать все скачанные rpms).
Все готово к установке. Устанавливаем, указав группировать
пакеты по источнику и выбрав наше место. Выбираем файл.
Ставим.
Редактируем файл /etc/amedyn. Вносим в него свой IP-адрес,
маску подсети, IP-адрес шлюза. Никаких пробелов после знака
"равно", будьте внимательны, из-за одного символа на полтора
миллиарда попала одна европейская ракета.
Редактируем файл /etc/resolv.conf. Вносим в него адреса
первичного и вторичного DNS.
Все. Перезагружаемся. Oops. Не надо, мы в Linuxе. Надо
стартовать сервис. Здесь как и у Ильи Муромца два пути:
первый запустить сервис, второй запустить скрипт.
Почему некто Муромец выбрал запуск скрипта?
Скрипт amstart.sh - стартует загрузку драйвера и поднятие
сетевого интерфейса atm0.
Скрипт amstop.sh - с двух раз?
Потому что, в глючных системах, надо контролировать каждый
шаг, а скрипт позволяет делать это лучше, сервис оставим на
потом, когда все будет работать как часы.
# amstart.sh
Если google не пингуется, то что делать смотрим Замеченные
проблемы. Это раздел полнится глюками.
А если пингуется, что делать и кто виноват? Моч.. Смотрим
вопросы.
Информация о существующем драйвере Amedyn версии от
29.10.2003
Данный драйвер был переделан автором(не мной, мозгов не
хватит, пока) из драйвера для модема Alcatel Speedtouch,
который построен на чипсете Alcatel Telecom DinaMiTe, на
котором построен мой(да, находящийся в собственности под
оперативным управлением по доверенности) Zyxel.
С некоторых пор драйвер для speedtouch включен в поставку
ядра linux. Надо бы сделать патч для Zyxel, но этих Zyxel-ов
так много разновидностей, что нужен репозитарий, с кучей
товарищей, которые будут беречь каждую народную копейку. Вот
бы еще исходник firmware бы где взять. Можно было бы опутать
dslем всю эту ужасно-огромную бывшую верхнюю вольту, хотя
правда за оптоволокном в каждый дом.
История об установке драйвера amedyn и его
конфигурировании
Скачиваем драйвер с сайта автора (см. ссылки). Благодарим
судьбу, что есть люди, которые делают правильные и нужные
вещи.
Распаковка архива в каталог /usr/src, следование процедуре
компиляции-установки, настройка параметров и отсутствие
результата.
Начинаем разбираться глубже. Читаем форум, волосы дыбом.
Итак, метод плаг и прай не работает, надо что еще. Впадаем в
депрессию, ну как так можно делать продукты без акцизной
марки, это же просто вредительство.
Заходим рутом и выполняем команду:
#mount /dev/brain /mnt/head -t system_analysis
#cd /mnt/head
#sysanald -b
Проверяем все ли работает нормально:
#ps -ax | grep sysanald
Видим запущенный процесс. Здесь надо отметить, что не всегда
процесс запуска столь успешен, как в нашем случае. В таких
ситуациях, помогает только помощь эксперта, см. в конце
статьи рекламу.
Ставим задачу: Поиск неисправности в многокомпонентной
системе.
Исходная посылка: Firmware и процесс загрузки работают
правильно, драйвер тоже, опыт предыдущей системы.
Проверяем исходную посылку. Замечаем, при компиляции
драйвера, выдается странное предупреждение. Ок, драйвер на
заметку.
Выполняем скрипты по отдельности.
#amload.sh
Выполнен успешно. Firmware загружено. С точки зрения опыта
заложенного в программу amload, все ok. Делаем вывод о
работоспособности firmware и процесса загрузки.
#modprobe amedyn
Ничего не сообщил. Смотрим список загруженных модулей:
#lsmod
Вроде amedyn загружен.
Помня, что драйверы немногословны, делаем следующее:
Запускаем дополнительное окно консоли и в ней выполняем
команду:
#tail -f /var/log/messages
Теперь мы видим последние сообщения на стандартном логгере.
Смотрим там строчки содержащие строку xdslusb. И видим, что
есть какая-то проблема, вывалились внутренности, не
транспортабелен, в морг значит в морг.
Ок, проблемы с ваучером. Ставим драйвер на заметку.
#amnetup.sh
Отвалился, в моем частном случае, с сообщением "No route to
host". Ставим на заметку.
Что-то не работает. На заметке у нас драйвер и amnetup.sh.
Странно, драйвер раньше работал, правда с другим ядром.
Проблема скорее всего во взаимодействии драйвера и нового
ядра. Как ее фиксить, на данном этапе не представляю.
Смотрим где остановился amnetup.sh. Для этого смотрим
исходник скрипта. Ок, падает на команде atmarp -s $GATEWAY
0.$VPI.$VCI. Что за команда, что делает, не представляю.
Итак, драйвер или amnetup.sh. Вначале грузится драйвер.
Начнем с драйвера.
Идем на форум, читаем труды. Просто сказано - идем, на самом
деле, это гиммор, для тех перцев которые не продублировали
свои системы и не любят работать с соломкой.
Чтение "шескпира" в оригинале дает массу информации, об
исключениях при монтировании /dev/brain.
Делаем просто, отсекаем инфу связанную с неверно
сконфигурированными ядрами, не поставленными библиотеками,
отключенным usb, мозгом, ногами и руками и пр. Надежда
только на генетически модифицированные продукты и на ее
величество генетический алгоритм.
Выясняется, что драйвер у кого-то работает, у кого-то нет,
на одних яйцах идет, на других - нет. Да-а блин, имеется
пипл в наше время.
Информация которая заинтересовывает - драйвер является
переделанным из драйвера для модема Alcatel Speedtouch и
переделка заключается в укачивании, копировании модуля
speedtch.c, изменении идентификаторов модема, а также еще
то, что драйвер Speedtouch есть в ядре.
Качаем, отправляем с дублирующего процессора, по
беспроводной связи, с помощью openOBEX протокола скачанный
файл, распаковка, выполнение шаманской инструкции,
компиляция, проблемы и no results.
Странно, проверяю:
#mount
/dev/brain смонтирован.
Ага, вот sysanald process suspended. Что такое, suspended.
Читаем LONGMAN Guide to English Usage. Точного соответствия
не найдено, но есть похожее, ну знаете как у нас в русском,
слово - suspence. Смысл: suspence is mental uncertainty: a
novel of suspence. Да вместо одно непонятного слова, еще
несколько. Знаете, как у Хаббарда, если слово непонятно,
надо его понять.
После некоторого времени попыток, вспоминаю, пора бы уже
записывать, что в ядре идет драйвер, смекаю, если
компилируется ядро, то компилируется и драйвер. Захожу в
каталог (или папку) /usr/src/linux-2.6.3-7mdk/drivers/usb/misc/.
Вижу файл speedtch.c. Цепляюсь зубами и не отпускаю, пока не
зайду в папку /usr/src/amedyn/module/. Да, с терминологией
проблемы, надо бы внести в повестку следующей думы.
Отпускаю, уже не дышит. Переименовываю в xdslusb.c,
предварительно перетащив в корзину старый, до чего же линукс
дошел, до мусорного ведра на столе. Правлю идентификаторы
VENDORID и PRODUCTID, указываю своего модема.
Делаю make. Падает. На каком- то модуле br..., еще там
что-то.
Ну что делать, давно хотел изучить устройство Makefile.
Смотрю, все четко разбито на разделы, более менее понятно.
Делаю еще раз make. Смотрю вывод результата. Определяю что
мой модуль компилируются, а падает этот br. Выясняю что за
киса. Нужен только для протокола моста (RFC 1483/2684
bridged). Забавно, вне контекста, фраза протокол моста не
понимается. Нам не надо шоко, выкидываем, правя Makefile. Не
с первого раза, но скомпилировались. И вроде никаких
предупреждений. Ну еще раз для надежности делаем очистку:
make clean, дистилляцию make uninstall. Снова make.
Свят,свят.
Запускаем:
#amstart.sh
Что-то ругается про crc32, но пишет что запускается драйвер
в нормальном режиме. А потом падает, да все в том же месте
amnetup.sh.
Жалкая попытка пинга www.google.com, в надежде что все само
рассосется. Не рассосется, халявы не будет, я понял еще не
так давно. Как сказал Эдисон, если бы люди предпринимали при
каждой проблеме, в три раза больше усилий, то все проблемы
были бы разрешены. Ну, это вольный пересказ слов того
дядьки, кто лампочку зафигачил на 1001 шаге. Степ бай степ
анд you ин.
Что за crc32? Форум, поиск. Результат - вроде не нужен
драйверу в ядрах 2.6. Комментируем.
Правда все равно падает в amnetup.sh
Опять консоль с хвостом логгера. Изучаю, как работает плаг
анд плай. Отключаю модем и подключаю, смотрю лог. Вроде
проблем не замечено. Видны сообщения "Usb disconnect..",
"usbcore: registered new driver xdslusb". Вроде система
видит драйвер и нет больших ошибок, правда маленькие есть
всегда.
lsmod докладывает о наличии модуля ядра amedyn, это наш
добрый драйвер.
Теперь анализирую стартовый скрипт amload.sh. Вижу, что
пытается снести usb подсистему, потом драйвер, до основания,
а затем, на новом чистом месте запустить загрузку firmware.
Ну что, понятно. Вначале загрузка firmware, потом драйвер,
потом запуск amnetup.sh в нашем случае, с другими
протоколами-случаями разбирайтесь сами, мы же в свободной
стране. Америка, Америка. Не забудьте встать и приложить
руку.
Перехожу к amnetup.sh.
Запускаю. Загружаются всякие товарищи из подземелья. И
первая проблемное сообщение приходит от atmarpd.
Опять чего-то не хватает, а именно "no signaling daemon".
Это что, типа регулировщика на перекрестке?
Достает разбираться, откладываю. Перевожу проблему в фоновый
режим подсознания. Утро вечером и т.п.
На свежую голову запускаю процесс сверки подобия параметров
из Windows и linux.
Четко проверяю цифры. IP-IP, Маска-Маска, Шлюз - отличие. В
винде стоит, какой-то не понятный шлюз, в поддержке сказали,
что шлюз должен быть мой IP адрес с последним октетом
установленным в единицу. Ну ладно. Верю на слово. Проверяю.
Правлю /etc/amedyn.
Стартую amstart.sh. Оп. пишет amnetup.sh succeseful. Ого-го.
Дрожащими руками набираю ping www.rambler.ru. Ничего.
Знаете, есть такой смайлик, так вот, фэйс выглядел не лучше.
Анализ лога. Опять регулировщик отсутствует, спит на посту
что-ли. "no signaling dieman"
Да, нынешнего уровня понимания устройства Linux, явно не
достаточно. Да, но это был второй учебный заход. А надо 3
как минимум. Это еще нас учил великий товарищ Чейто. Под
альтернативной коммерческой ОС, гиммора не меньше,
попробуйте настроить спаривание двух зубастых голубозадых с
собственными драйвами. Трах с лицензией обеспечен, как и
удовлетворение от хорошо сделанной работы. Они бы еще парсер
отечественного законодательства на уровне чипов реализовали,
ироды.
Продолжаю, нахожу 2 причины: Неверный шлюз (как оно работало
в Win, не знаю, но понимаю, что много лишнего мне продали в
довесок) и видимо неверные настройки параметров качества
сервиса (qos). Есть отличия в цифрах sdu и т.п.
Делаю чтение документации cat mans > /dev/brain, несколько
иным способом: man:/atmarp в konqueror. Eror - это от слова
error? Помянем калькулятор с ЕГОГ. Да чтобы работало, нужно
установить man страницы.
Далее, анализ информации из настройки windows, на предмет
этого qos. Все на уровне совпадения неизвестных слов, ubr,
aal5. Любимый max_sdu который отличается от своего
одноименца из win.
Составляем набор параметров в строку и правим amnetup.sh в
части параметров atmarp
Запуск. Пинг. Заработало. Милый, добрый Интернет пингуется,
как много в этом слове.
# ifconfig
atm0 Link encap:UNSPEC HWaddr
00-00-20-F4-FF-BF-1E-00-00-00-00-00-00-00-00-00
inet addr:195.xxx.xxx.xxx Mask:255.255.255.0
UP RUNNING MTU:9180 Metric:1
RX packets:1547 errors:0 dropped:0 overruns:0 frame:0
TX packets:1686 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:184084 (9.7 Kb) TX bytes:540059 (7.4 Kb)
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
195.xxx.xxx.0 * 255.255.255.0 U 0 0 0 atm0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default xxx.xxx.xxxx.xx 0.0.0.0 UG 0 0 0 atm0
#
Все на месте.
Смотрим, что имеется в подсистеме ATM:
# cd /proc/net/atm/
# ls
arp devices pvc svc vc xdslusb:0
# cat arp
IPitf TypeEncp Idle IP address ATM address
atm0 PVC LLC 11 xxx.xxx.xxx.1 0.1.32
# cat devices
Itf Type ESI/"MAC"addr AAL(TX,err,RX,err,drop) ... [refcnt]
0 xdslusb 00a0c55bfb80 0 ( 0 0 0 0 0 ) 5 ( 204 0 236 0 0 )
[2]
# cat pvc
Itf VPI VCI AAL RX(PCR,Class) TX(PCR,Class)
0 1 32 5 0 UBR 0 UBR CLIP, Itf:atm0, Encap:LLC/SNAP
# cat svc
Itf VPI VCI State Remote
999 0 0 CONNECTED
# cat vc
Address Itf VPI VCI Fam Flags Reply Send buffer Recv buffer
[refcnt]
cbcXXX00 0 1 32 PVC 2047 0 0/ 110592 0/ 110592 [2]
cbXXXaX0 999 0 0 SVC 0102 0 0/ 110592 0/ 110592 [2]
# cat xdslusb:0
DynaMiTe USB Modem (usb-0000:00:07.3-2)
MAC: 00:a0:c5:xx:xx:80
AAL5: tx 213 ( 0 err ), rx 245 ( 0 err, 0 drop )
Line up, firmware loaded
#
Чтобы понять, что значат все эти термины, надо почитать
документацию по АТМ. Все не так страшно.
YANI. Даже в Интернет можно не ходить. Howto идут в
поставке. Все в одном. И это правильная концепция, для нас
безлошадных на информационной супер магистрали.
Проверяем последовательность запуска, убираем не нужное,
сводим все к простой процедуре.
Все Инет работает.
Теперь надо сделать что-то, что-бы потом не парится с этой
проблемой еще раз, хотя придется, но уже меньше.
Цель: изготовить rpm пакет, для себя и для друзей.
Как изготовить rpm рассказывать? Ну это было достаточно
быстро. Нашел инструкцию, почитал, сделал. Эта операция
скоро вкомпилируется в мозги.
Результат готовый rpm-файл (см. ссылки). Данные rpm файл
рассчитан на использование с ядром 2.6.3-7mdk идущем в
поставке Mandrake 10 Offical Discovery. Данное ядро уже
настроено на поддержку ATM и всех прочих вещей нужных для
этого модема. Так что plug and play. Теперь ловим бочку
дегтя. Не совсем плаг анд плай, смотрим Замеченные проблемы.
Информация об архитектуре драйвера amedyn
Данный драйвер моделирует сетевую ATM карту в подсистеме ATM
ядра Linux. Т.е. для вышележащих приложений появляется (raw)
ATM устройство. Ну а usb, так можно pci, isa или еще
что-нибудь.
Настраиваем plug&play
Желание достичь качественного результата ведет меня дальше.
Начинаю разбираться с настройкой горячего подключения.
Ставим цель, что мне хочется достичь: Мозговой штурм
приводит к четырем способам работы с модемом. Далее сценарии
по возрастанию сложности конфигурирования.
Сценарий 1. Компьютер выключен, модем подключен, телефонная
линия подключена.
Включение компьютера. Загрузка драйвера и автоматическое
конфигурирование сетевого интерфейса. Работа в Интернет.
Выключение компьютера.
Это простой сценарий, включающий в себя последовательную
настройку драйвера и сети.
Не включает в себя режим горячего подключения и
конфигурирования. Не позволяет на ходу менять сетевые
подключения.
Он реализуется существующим драйвером и скриптами.
Для запуска сервиса при загрузке:
В Mandrake 10 надо запустить Центр управления Mandrake 10
зайти в раздел Система->Сервисы
Отметить сервис amedyn_spb стартовать при загрузке. Все.
Интернет должен быть доступен.
Сценарий 2. Компьютер выключен, модем не подсоединен,
телефонная линия подключена.
Включение компьютера. Загрузка системы. Подключение модема.
Автоматическая загрузка и инициализация драйвера.
Автоматическая настройка сетевого интерфейса. Работа в
Интернет. Отключение модема. Автоматическая остановка
сетевого интерфейса. Автоматическая выгрузка драйвера.
Продолжение работы в системе. Выключение компьютера.
Требуется настроить подсистему usb-agent. Займусь, потом
напишу.
Сценарий 3. Отличается от Сценария 1 и 2, тем что
подключение и отключение телефонной линии, должно
сопровождаться корректным автоматическим конфигурированием
сетевого интерфейса и уведомлением пользователя (и журнала
syslog) о наличии/отсутствии физического подключения. Пока
не работает, видимо решается на уровне драйвера. На сайте
появилась новая утилита, надо посмотреть, люди работают.
Сценарий 4. Отличается от Сценария 2, тем что автоматически
корректно подключаются, конфигурируются и отключаются все
службы и сервисы завязанные на сетевой интерфейс модема,
например расшаренное(shared) интернет-соединение,
подключенные клиенты и пр. Т.е. происходит уведомление всех
клиентов об отключении интерфейса. Употребляемый термин
"корректно" подразумевает, что приложение, служба, сервис,
обрабатывает все нестандартные ситуации, а не зависает. К
примеру, в сценарии 3 при отключении телефонной линии
драйвер модема зависает, уведомления к клиентам не приходят,
ситуация обрабатывается некорректно.
Поле не паханное. Есть где развернуться.
Замеченные проблемы
Проблема с перезапуском службы amedyn_spb. Выдается
сообщение: connection time out, Причина ниже, в проблеме 2.
Инициализация (загрузка firmware) возможно только 1 раз при
подключении. Повторная инициализация командой amload
приводит к ошибке. Лечится отключением модема на 30 секунд.
Также см. Проблема 3.
Команда ifconfig не распознает тип atm, в результате многие
программы настройки сети не умеют работать с данным типом
сетевого интерфейса, в том числе конфигуратор сети Mandrake
10.
Работоспособность только при одном подключенном ADSL модеме.
В драйвере есть код, который берет первый попавшийся под
руку модем и загружает в него firmware.
При долгом отсоединении сетевого интерфейса (по команде
amnetdown.sh) в течении ночи, последующее поднятие
интерфейса (amnetup.sh) завершается на вызове amioctl с
результатом -1. Решается только отсоединением модема секунд
на 30 и повторным подсоединением и выполнением команды
amstart.sh.
Не пингуется IP-адрес шлюза. Это особенность данной серии
модемов. В Win аналогично. Сказали в поддержке, звонил
ночью, люди работают.
Дистрибутивы не имеют понятия о пользователях, которые не
любят копаться в ядре.
Имеются предупреждения при компиляции драйвера amedyn_spb
под ядро 2.6.3-7mdk. У меня на работоспособность они не
влияют. При компиляции под ядро 2.6.7 надо проделать
процедуру замены файла драйвера, либо попросить меня,
выложу.
Сообщение .broken pine. можно игнорировать когда все
работает. Если же не работает загрузка, то надо разбираться,
на форуме что-то было про это.
Много проблем. Но они постепенно решаются. Через год все
будет хорошо. Харашо. Все будет харашо я это знааю.
Заключение в виде краткого списка ToDo
Короче, надо бы драйвер переделать и включить в ядро.
Желающие? Правда ядро опухнет скоро.
Еще надо бы сделать локализацию сообщений. Разберусь
как-нибудь.
Изготовить исходник в формате rpm, удовлетворяющий стандарту
пакетов с исходниками.
Ссылки
Адрес сайта с драйвером amedyn: http://sourceforge.net/projects/zyxel630-11
Адрес сайта с драйвером amedyn_spb: http://www.dzhi.sp.ru/drivers/amedyn_spb-2004-08-01.k2.6.3-7mdk.i686.rpm
Адрес сайта с исходником драйвера amedyn_spb: http://www.dzhi.sp.ru/drivers/amedyn_spb.tar.gz
ПО использованное при создании данной статьи
Mandrake 10 . дистрибутив.
Amedyn . open source драйвер модема Zyxel 630-11.
Rpmdrake . прелестная утилита настройки Mandrake 10.
Konqueror . интегрированный браузер, с поддержкой ftp, для
закачки на домашнюю страницу, просмотра созданной страницы.
|