zaijzhgh 发表于 2009-6-25 09:01

linux模块载入错误

我新装的ubuntu 9.04 ,然后参照LINUX设备驱动开发里面的介绍编了个Hello   World!块,Makefil也是按照书上的写的,make   -C   /usr/src/linux   M=/home/test   modules   编译模块也没问题,编译完了以后hello.ko也生成了,但是insmod   hello.ko就出现提示:   
    insmod:   error   inserting   'hello.ko':-1   Invalid   module   format   
然后dmesg一下发现:hello:disagreesaboutversionofsymbolstruct_module   
    我原来安装系统的时候内核是2.6.28-11,然后我下载了一个内核源码2.6.30编译核心,不行.又换了一个内核2.6.28,还是相同的错误.
    不知道这个问题怎么解决?

zaijzhgh 发表于 2009-6-28 18:22

本帖最后由 zaijzhgh 于 2009-6-28 18:33 编辑

Okay,今天找到了一个临时的解决办法:
我使用dmesg的时候发现类似下面的提示:

Dec 19 13:42:29 localhost kernel: hellomod: version magic '2.6.24.2 SMP mod_unload 686 4KSTACKS ' should be '2.6.27.7-134.fc10.i686 SMP mod_unload 686 4KSTACKS ' (注:错误提示是从网上copy来的,所以时间不对,不过提示是相似的,版本号不对。)

那该怎么办呢?最简单的办法就是:修改源目录下的Makefie(这个是你编译内核的时候的Makefile,注意和下面的Makefile区分)

最Makefile第1-4行的值改为当前内核一样的值
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 29
EXTRAVERSION = .4
NAME = Err Metey! A Heury Beelge-a Ret!
(因为我下载的内核包是2.6.29.4)
那怎么确定你当前内核的值是多少呢?

vi/lib/modules/`uname -r`/build/Makefile(这个是安装系统时候的Makefile)
如果不会用vi,那么使用gedit吧。
gedit /lib/modules/`uname -r`/build/Makefile
路径不一定和你的相同,所有你要花点时间找你编译内核时候的Makefile和安装系统时候的Makefile了。
现在知道了吧?
暂时这样了。
补充:可能还需要编译一下内核,不过呢不需要全部编译,等version.o被编译出来就可以了。这个我也是凭感觉而已。反正做到这一步我就可以载入模块了。

JiajiaX2 发表于 2009-7-21 16:16

感觉kernel好玩不

尚观小熊 发表于 2010-12-27 16:44

怎么那么复杂的,我上次去听的讲座讲的好像比这简单啊。。他们邀请了著名的Linux讲师分析嵌入式知识。是免费的在广州市越秀区东风西路140号东方金融大厦610。。恩恩。。
页: [1]
查看完整版本: linux模块载入错误