[Comm] Проблемы с Iola PLN

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Сб Июл 16 22:27:35 MSD 2005


On Sat, Jul 16, 2005 at 08:58:51PM +0400, Андрей Жмурин wrote:
> Заранее прошу на чайника сильно не замахиваться. Поиск по архивам
> не дал никакой информации, потому и пишу сюда.
> 
> Имеем: из железа - однопортовый PCI-адаптер IolaPLN (надтональный 
> xDSL-модем, изготавливается в Калуге), из софта - ALM2.4 и родные
> дрова, взятые с сайта - http://www.iola.ru/1251/support.htm
> (пробовал и 3.07, и 3.11-2).
> 
> Поставил пакет с исходниками ядра, пакет с заголовками, gcc++ 2.95.
> Распаковал исходники, запустил make menuconfig, получил .config ядра,
> дал на него ссылку в includes (дрова Иолы очень хотели его там видеть).

Вот это уже неправильно - вместо исходников и заголовков того ядра,
которое на самом деле используется, были подсунуты какие-то другие.
Или вы установили именно это пересобранное ядро?  Тогда это в принципе
правильно, за исключением того, что скрипты сборки модулей в этом
драйвере, как обычно, кривые.

> Откомпилил согласно документации, сделал depmod -a, modprobe ipln

Странно, что собранный таким образом модуль вообще загрузился...

> dmesg показал наличие записей про Iola на eth0 с правильным IP и MAC
> (он по IP у них ставится), но утилита конфигурации говорит, что
> появившийся eth0 не является открытым, потому что это вообще не IolaPLN.
> 
> Активно подозреваю, что где-то сильно накосячил, но пока опыта не хватает
> понять, где? Если кто сможет ситуацию прояснить, буду признателен...

Больше всех накосячили разработчики драйвера - это же надо сделать
Makefile и скрипты вокруг, наводящие на мысли о подобном способе
сборки.  А уж как они собирают модуль для ядер 2.6.x - это вообще
достойно занесения в сборник вредных советов (я-то надеялся, что с
2.6, где есть стандартная процедура для сборки сторонних модулей,
подобными извращениями больше никто заниматься не будет).

Вместо всего этого безобразия нужно:

0) Удалить модули, которые были собраны оригинальными скриптами, из
/lib/modules.

1) Поставить пакет kernel-headers-modules-std-up (версия и сборка
этого пакета должны точно соответствовать используемому ядру - если
ядро обновлялось из updates, то и этот пакет необходимо взять оттуда
же).  Или kernel-headers-modules-std-smp, если используется SMP-ядро.
При этом автоматически вытянется по зависимостям пакет
kernel-headers-std-up и соответствующая версия компилятора (в данном
случае - gcc2.96).

2) Распаковать исходники драйвера и положить в каталог ipln/linux файл
Makefile следующего содержания:

===========================================================================
obj-m := ipln.o iplnusb.o

src ?= .
EXTRA_CFLAGS := -I$(src)/../common -DIPLN

-include $(TOPDIR)/Rules.make
===========================================================================

3) Находясь в этом же каталоге, выполнить команду вида:

	make -C /usr/src/linux-2.4.26-std-up modules SUBDIRS=`pwd`

(имя каталога зависит от версии и варианта ядра).

4) Положить собранные модули ipln.o, iplnusb.o (или ipln.ko,
iplnusb.ko для ядер 2.6.x) куда-нибудь в /lib/modules/<версия_ядра>
(можно создать там подкаталог с любым разумным именем, чтобы не
смешивать эти файлы с установленными из пакетов).

5) Выполнить команду depmod -a.

После этого можно загружать модуль (modprobe ipln).

Кстати, похоже, этот модуль при загрузке читает файл /etc/ipln.cfg
(ещё одна вещь, которая в нормальных модулях делаться не должна) -
возможно, какие-то проблемы вызываются отсутствием или неправильным
содержимым этого файла.

В процессе борьбы с утилитой конфигурации может пригодиться strace,
чтобы посмотреть, что она пытается делать.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20050716/fbff4853/attachment-0003.bin>


Подробная информация о списке рассылки community