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, чтобы посмотреть, что она пытается делать.