第一次練習寫模塊,使用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起不來的!