免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8360 | 回复: 7
打印 上一主题 下一主题

加载一个简单的hello驱动程序模块到开发板出现的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-20 14:14 |只看该作者 |倒序浏览
我用的开发板是s3c2440,内核是2.6.31,在主机上编译好了hello模块,可是把编译好的hello.ko下载到开发板上,用insmod命令安装hello.ko时出现如下错误:
     [root@TX2440A cao]# insmod hello.ko hello: version magic '2.6.31 modversions ARMv5 ' should be '2.6.31 mod_unload     ARMv4 '
insmod: can't insert 'hello.ko': invalid module format
恳请高手帮忙,我是一个刚学驱动开发的菜鸟

论坛徽章:
0
2 [报告]
发表于 2011-03-20 22:36 |只看该作者
你确定你编译kernel以及rootfs时用的toolchaim和你编译hello.ko的toolchaim是同一个??你这个问题我倒是没见过,但是从报错信息上看,应该是编译器的版本不同导致的, ARMV5显然比ARMV4高级

论坛徽章:
0
3 [报告]
发表于 2011-03-21 13:06 |只看该作者
我详细介绍一下我的情况:
1,我先把开发包中自带的linux镜像装到s3c2440上,并且能实现一个简单的应用程序。
2,编译简单的hello驱动模块,s3c2440的内核是2.6.31,主机上用的是ubuntu10.04,交叉编译器是 arm-linux4.1.2 我先把开发包中的内核源码包linux-2.6.31_TX2440A20100612.tar.bz2和它的补丁linux-2.6.31_TX2440A201000612.patch下载到我的一个目录下,解压linux-2.6.31_TX2440A20100612.tar.bz2,然后进入到解压后的linux-2.6.31_TX2440A目录,打上补丁
patch -p1 < /home/cao/tx2440a/linux-2.6.31_TX2440A201000612.patch,出现了下面的一些东西
Reversed (or previously applied) patch detected!  Assume -R? [n]我直接按enter键,然后输入
make oldconfig 和make preare
3.我进入hello目录编译hello.c,生成了如下文件:hello.ko hello.mod.c hello.mod.o hello.o Module.symvers modules.order
4,编译好的hello.ko下载到开发板上,用insmod命令安装hello.ko时出现如下错误:
     [root@TX2440A cao]# insmod hello.ko hello: version magic '2.6.31 modversions ARMv5 ' should be '2.6.31 mod_unload     ARMv4 '
insmod: can't insert 'hello.ko': invalid module format
    我不清楚什么原因,试着把它的内核linux-2.6.31_TX2440A编译一下,结果出现了上面的错误
drives/block/cciss.c:In function 'cciss_init':
drives/block/cciss.c:4197:error:size of array 'type name' id negative
make[2]:***[drives/block/cciss.o]Error 1
make[2]:***[drives/block]Error 2

论坛徽章:
0
4 [报告]
发表于 2011-03-21 14:58 |只看该作者
你是指交叉编译器吗?

论坛徽章:
0
5 [报告]
发表于 2011-03-21 16:29 |只看该作者
我估计不是啊,我换了多个交叉编译器,比如 arm-linux-gcc-3.4.5 arm-linux-gcc-3.3.2 arm-linux-gcc-2.9.5 真晕啊,搞了好多天了!

论坛徽章:
0
6 [报告]
发表于 2011-03-25 17:58 |只看该作者
你在模块的MAKEFILE中指定的CROSS_COMPILE和你编译kernel和rootfs的交叉编译器一定要一致……
     version magic '2.6.31 modversions ARMv5 ' should be '2.6.31 mod_unload     ARMv4 ' 看起来,你编译模块所用的交叉编译器是用的ARMV5的,而你的kernel和rootfs应该是用的ARMV4的,所以会出现这个问题……

论坛徽章:
0
7 [报告]
发表于 2011-03-25 17:59 |只看该作者
这个是我的看法,如果解决了的话,麻烦共享一下 :wink:

论坛徽章:
0
8 [报告]
发表于 2011-03-26 00:45 |只看该作者
内核版本和编绎模块时内核树不一样导致的。
需要重新编绎内核,并用该内核树编绎模块,开发板上同时下载这二个东西才OK
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP