第一次练习写模块,使用insmod安装模块时,发现内核版本不匹配,你可以baidu或者google下,有很多解决方案,但是我这种不匹配错误有点不太一样,不管我在开发板上uname -r查看运行linux内核版本,还是用modinfo来查看编译模块版本都是显示的3.0.8,很奇怪内核版本一样的的怎么还会报错呢。
/mnt/work # uname -r
3.0.8
chen@chen:~/work/project/LinuxCross/my6410/nfs/work$ modinfo first_drv.ko
filename: first_drv.ko
depends:
vermagic: 3.0.8 mod_unload modversions ARMv6
再看insmod的错误提示
# insmod first_drv.ko
insmod: kernel-module version mismatch
first_drv.ko was compiled for kernel version
while this kernel is version 3.0.8
我发现我的错误提示和别人的错误提示不一样,就是我的ko内核版本并没有显示出来 (for kernel version后面没有版本号),所以我就推测可能是insmod函数本身出了错误,因为yaffs2文件系统是我自己做的,所以我觉得busybox和glibc的不匹配的可能很大,为了证明这个猜测,我将glibc从2.3.5换成了2.8,重新制作yaffs2文件系统,烧写进去,启动,挂载nfs,再insmod ***.ko
ok,问题解决了!
最后为制作YAFFS2文件系统的朋友给个建议,就是编译busybox使用的交叉编译工具一定要和yaffs2的glibc版本匹配(就是lib目录的库),不然yaffs2起不来的!