[mdk-re] fealnx.o: unresolved symbol alloc_skb_R2gig666cd57b
Igor Fadin
=?iso-8859-1?q?fid_=CE=C1_darim=2Eru?=
Чт Ноя 22 14:04:06 MSK 2001
On Thu, 22 Nov 2001 12:52:59 +0300
Yura Zotov <yznews на hotbox.ru> wrote:
YZ> On Thu, Nov 22, 2001 at 12:45:47PM +0700, Igor Fadin wrote:
>> On Wed, 21 Nov 2001 21:08:41 +0300
>> Yura Zotov <yznews на hotbox.ru> wrote:
>> YZ> fealnx.o: unresolved symbol netif_rx_R2gigad5dfb67
>> YZ> fealnx.o: unresolved symbol __kfree_skb_R2gig14efd9ae
>> YZ> fealnx.o: unresolved symbol unregister_netdev_R2gig8efc83c2
>> YZ> fealnx.o: unresolved symbol init_etherdev_R2gige9f4817d
>> YZ> fealnx.o: unresolved symbol eth_copy_and_sum_R2gig2d147569
>> YZ> Вот что пишет мне при загрузке драйвер сетевушки. Собственно
>> YZ> поэтому и не работает, наверное. Что бы это значило? Может ему
>> YZ> ядро 2.4 надо, а не 2.2? Почему же тогда скомпилялся? У него доки
>> YZ> почти нету.
>>
>> Покажи что /sbin/ksyms -a|grep init_etherdev говорит.
YZ> 801beba4 init_etherdev_R2gigac66723a
>> Ядро сам компилил? cat /usr/src/linux/.config|grep MODVERSIONS что говорит?
YZ> CONFIG_MODVERSIONS=y
YZ> Ядро собирал из src.rpm, сейчас оно у меня 2.2.19-alt2-custom-3
>> Драйвер сам компилил? Если сам, что там на счет MODVERSIONS было?
>>
YZ> Сам собирал. Вот кусок кода из него. Компилировал такой же
YZ> командной строкой, которой и модули из src.rpm собираются.
YZ> #ifdef MODVERSIONS
YZ> #include <linux/modversions.h>
YZ> #endif
YZ> Юрий А. Зотов
ok. Не работает, потому что не загрузился.
Не загрузился, потому что символы не разресолвены.
Не разресолвены, потому что:
YZ> fealnx.o: unresolved symbol init_etherdev_R2gige9f4817d
YZ> 801beba4 init_etherdev_R2gigac66723a
т.е. компилил модуль под одним ядром, а запустить пытаешься под другим.
Под другим имеется ввиду не обязательно 2.x.y <-> 2.z.w a и разные варианты
одного и того же ядра, номер компиляции другой например.
Способов излечить ситуацию много.
Например, скомпилять модуль под текущим ядром. :)
При этом проверить чтобы /usr/src/linux-> указывал куда надо, т.е. на текущее ядро,
а не на старое (возможно у тебя на старое указывает, для компиляции ядра это по-барабану,
а для самопальных модулей не из набора кернела - нет).
Еще способ. Многим модулям для ядра, в особенности драйверам, MODVERSIONS глубоко по-барабану
(ну, я не имею ввиду nvidia-подобные :) ).
Поэтому, скомпилить твой модуль с -DNOMODVERSIONS вместо -DMODVERSIONS. (Заменить в соответствующем
Makefile или командной строке).
При этом у внешних символов в модуле исчезнут "_R2gige9f4817d"-подобные хвосты.
От этого modprobe может начать вопить. Но на эти вопли можно не обращать внимания.
Если же modprobe откажется загружать - грузить драйвер через insmod -f xxxxx.o
А вообще, лучше CONFIG_MODVERSIONS=y без особой надобности не включать.
Ну и если ядро перекомпиляешь - уж не пожалеть 5 минут на make modules;make modules_install;
Игорь
--
----------------------------------
E-Mail: fid на darim.ru
----------------------------------
Подробная информация о списке рассылки community