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"的错误。 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. 不好意思,A系统的kernel 为2.4.18,上面是笔误。
因为实在不知贴在本站哪个版块更合适些,只好借贵宝地一用了。
any advice?thanks. it is hard to solve. post the error message here (when use insmod -f). 重新编译内核,去掉loadable module support选项里的module versioning support试试 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 贴于此,请不要见怪!. 可以把Red Hat8.0(kernel 2.4.18-14)内核重新编译为kernel 2.4.18。
页:
[1]