sun1504 发表于 2004-8-9 10:32:22

insmod时出现kernel mismatch问题,如何?

(也许贴到这合适一点)
我正在一个Linux系统(为方便下面写为A系统,kernel为2.4.1下配置网卡(BroadCom的),需要模块bcm4400.o。
问题是:A系统不具有编译源码的能力(为什么?我也不知道)
我不知怎样才能在别的kernel verison下(手边有RedHat 8.0,9.0)由driver源码编译生成适合kernel 2.4.18的模块。无奈,我在Red Hat8.0(kernel 2.4.18-14)下编译的模块。当插入时出现问题(几乎是必然的!):
$insmod bcm4400
Using /lib/modules/2.4.18/kernel/driver/net/bcm4400.o
/lib/modules/2.4.18/kernel/driver/net/bcm4400.o:kernle-module version mismatch.
/lib/modules/2.4.18/kernel/driver/net/bcm4400.o was compiled for kernel version 2.4.18-14,
while this kernel is version 2.4.18
我想这是一个很普遍的问题(在不同的kernel version下试验同一个driver,只不过这一次的条件不太齐全),应该有人遇到过类似的问题吧。
应该从哪里解决呢?gcc的版本?所链接的库文件的版本?
恳请知道的同志赐教!不胜感谢。

PS:
若强制插入,
$insmod -f bcm4400
则又会出现一堆的"unresolved symbol"的错误。

Dragonfly 发表于 2004-8-9 22:13:43

this is unsuitable for "内核源代码阅读交流"

if A uses 2.4.1, then u have no chance to compile a driver for it under 2.4.18. there are big changes from .1 to .18.

sun1504 发表于 2004-8-10 09:52:36

不好意思,A系统的kernel 为2.4.18,上面是笔误。
因为实在不知贴在本站哪个版块更合适些,只好借贵宝地一用了。
any advice?thanks.

Dragonfly 发表于 2004-8-11 21:54:20

it is hard to solve. post the error message here (when use insmod -f).

1ball 发表于 2004-8-15 06:49:44

重新编译内核,去掉loadable module support选项里的module versioning support试试

sun1504 发表于 2004-8-16 14:23:10

thank everyone here.
first,我想我理解1ball的建议:如果kernel中symbol和module都同样的没有version信息,那就不会出现kernel mismatch;其实kernel mismatch这个错误现在已不再出现,我参考了LDD中的方法,在编译driver时用-I指定到kernel2.4.18的include下即可。
second,在上面所说不再kernel mismatch的情况下,我现在insmod bcm4400时会出现一些“unrosolved symbol”错误,这些错误比顶楼时“insmod -f bcm4400”时已少很多,但还是无法消除。
我想这是由于kernel中有一些symbol没有exported的原因,遗憾的是,现在那台机器已被分解(惨!!),因此一时无法如好心的Dragonfly(thanks for your reply)之言将error info贴于此,但都是一些common "unresolved symbol" 错误。
third,如何从"unresolved symbol"由缰索骥的找到问题的根本,现不知该用什么方法?
过几天我再把error info 贴于此,请不要见怪!.

silencexf 发表于 2004-11-30 11:12:07

可以把Red Hat8.0(kernel 2.4.18-14)内核重新编译为kernel 2.4.18。
页: [1]
查看完整版本: insmod时出现kernel mismatch问题,如何?