工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2766|回复: 3

linux模块载入错误

[复制链接]
发表于 2009-6-25 09:01 | 显示全部楼层 |阅读模式
我新装的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:disagrees  about  version  of  symbol  struct_module   
    我原来安装系统的时候内核是2.6.28-11,然后我下载了一个内核源码2.6.30编译核心,不行.又换了一个内核2.6.28,还是相同的错误.
    不知道这个问题怎么解决?
 楼主| 发表于 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被编译出来就可以了。这个我也是凭感觉而已。反正做到这一步我就可以载入模块了。
回复

使用道具 举报

发表于 2009-7-21 16:16 | 显示全部楼层
感觉kernel好玩不
回复

使用道具 举报

发表于 2010-12-27 16:44 | 显示全部楼层
怎么那么复杂的,我上次去听的讲座讲的好像比这简单啊。。他们邀请了著名的Linux讲师分析嵌入式知识。是免费的在广州市越秀区东风西路140号东方金融大厦610。。恩恩。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-4-27 14:06

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表