[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