insmod加载模块的错误

glacierful 2010-03-11 10:59:36
使用insmod命令在嵌入式板子上加载驱动,命令如下:
insmod ./test.ko

出现了这样的错误:
test: version magic '2.6.25 mod_unload ' should be '2.6.25-mux1222-svn62-dirty28 mod_unload '
insmod: cannot insert `./test.ko': Invalid module format (-1): Exec format error
...全文
3653 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
白想519 2011-07-18
  • 打赏
  • 举报
回复
是tftp的问题。。
[Quote=引用 34 楼 baixiaoustc 的回复:]
引用 33 楼 glacierful 的回复:
问题解决了。确实是版本不一致造成的。
谢谢大家的帮助。


能详细说下怎么解决的么,我也遇到同样的问题。
在同一个源码树下编译的板子内核和test.ko,烧进开发板就是insmod不了。
我用的mpc8379rdb。
[/Quote]
白想519 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 glacierful 的回复:]
问题解决了。确实是版本不一致造成的。
谢谢大家的帮助。
[/Quote]

能详细说下怎么解决的么,我也遇到同样的问题。
在同一个源码树下编译的板子内核和test.ko,烧进开发板就是insmod不了。
我用的mpc8379rdb。
glacierful 2010-04-01
  • 打赏
  • 举报
回复
还没有成功。
前几天写了个别的程序,现在转回来继续弄这个。
准备自己编译一下内核,下载到板子后,再试。
内核配置中,自动追加一些字符串到版本字符串的选项,默认是选中的。
hallowwar 2010-04-01
  • 打赏
  • 举报
回复
楼主还没有成功么? insmod 我即将需要,关注啊,顶起。
glacierful 2010-04-01
  • 打赏
  • 举报
回复
问题解决了。确实是版本不一致造成的。
谢谢大家的帮助。
morneve1 2010-03-31
  • 打赏
  • 举报
回复
今天也有位同事碰到这种问题,内核版本号都是一样,就是跟LZ一样后面的字符串有些不同,无法insmod
换了KERNEL 源码重编了就好

也关注这个问题,看看到底能否避开这个问题加载成功
UN_ChairMan 2010-03-25
  • 打赏
  • 举报
回复
内核要和开发板的内核一样,交叉编译环境也是,继续关注中,期待楼主早日解决问题
hallowwar 2010-03-25
  • 打赏
  • 举报
回复
学习了,以后用得到的,Mark,继续讨论。
glacierful 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 feiyinzilgd 的回复:]

Lz,编译驱动的Makefile中,内核源码树必须是目标板内核源码树。

否则,加载不成功的
[/Quote]
编译出的驱动程序版本必须和目标版上的内核版本必须完全一致吗?
编译驱动程序用的源码树比目标板上的稍微新了点,因为内核又做了一些修改。因为我只是写了一个最简单的驱动,只是用printk打印了消息,对于内核是否修改没有区别。

2.6.25-mux1222-svn62-dirty31
2.6.25-mux1222-svn62-dirty28

版本的差异只是最后的31和28的区别,这点挺令我困惑的。


这两天正在弄这个,原来用的是Ubuntu,现在换装了Fedora11,刚把环境搭好。
谭海燕 2010-03-21
  • 打赏
  • 举报
回复
Lz,编译驱动的Makefile中,内核源码树必须是目标板内核源码树。

否则,加载不成功的
PolarisChow 2010-03-20
  • 打赏
  • 举报
回复
mark
jiaguang3010717 2010-03-20
  • 打赏
  • 举报
回复
出现了这样的错误:
test: version magic '2.6.25 mod_unload ' should be '2.6.25-mux1222-svn62-dirty28 mod_unload '
insmod: cannot insert `./test.ko': Invalid module format (-1): Exec format error

环境不一样:
第一,KLDIR=板子上的运行2.6.25-mux1222-svn62-dirty28 的绝对路径
第二,Makefile下加上CC=arm-linux-gcc //或者交叉编译器的绝对路径

板子上的环境和编译环境一样应该就没问题了

有一个办法就是,你板子上的内核代码拷到PC机的一个文件下,直接可以将-c文件放在driver目录下,然后做成。ok文件,这样保证了环境一样,编译器是交叉编译器一样,还简单不用写makefile文件,就可以生成。ok文件了

LZ试试,应该没问题了
YYQSH 2010-03-19
  • 打赏
  • 举报
回复
看看!
hallowwar 2010-03-18
  • 打赏
  • 举报
回复
关注,正搞这个,Mark。
glacierful 2010-03-18
  • 打赏
  • 举报
回复
生成的驱动程序,我查看ELF文件是目标板的PowerPC格式的ELF文件。我的主机是X86的,所以我认为文件的格式应该是没问题的。

我编译时,用的是自己安装后的源码树,但目标版上的linux是我的同事用他的机子上的源码编译的。所以,估计是驱动程序的版本签名不同,导致了这个错误。

这两天正忙别的事情,忙完后试试。

glacierful 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wenxy1 的回复:]

1. 用uname -a 查看开发板的linux版本。

2. 用 file 查看 file.ko的版本。

版本不一致,在编译file.ko内核模块时,把kernel 源代码的path指向你的开发板内核的源代码path即可,另外还要注意编译时的环境变量。
[/Quote]
用uname 查看开发板linux版本是:
Linux freescale 2.6.25-mux1222-svn62-dirty28 #21 Fri Mar 5 15:19:59 CST 2010 ppc unknown

file test.ko的版本是:
test.ko: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped
glacierful 2010-03-18
  • 打赏
  • 举报
回复
使用insmod -f ./test.ko强制装入模块,还是提示同样的错误。
glacierful 2010-03-18
  • 打赏
  • 举报
回复
"test: version magic '2.6.25-mux1222-svn62-dirty31 mod_unload ' should be '2.6.25-mux1222-svn62-dirty28 mod_unload '
insmod: cannot insert `test.ko': Invalid module format (-1): Exec format error"
这是新编译的时候出现的错误提示:版本数字的差异是 dirty31和dirty28,我自己的程序是2.6.25-mux1222-svn62-dirty31,目标板上的是2.6.25-mux1222-svn62-dirty28,有没有办法不让linux自动加载最后的那一截版本号,或者有没有办法,在insmod的时候,让这个版本检查不起作用。
morneve1 2010-03-17
  • 打赏
  • 举报
回复
大家真热情,呵呵
我爱CSDN
UN_ChairMan 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wxywh 的回复:]
引用 14 楼 lishiyong110 的回复:

主要是没有分清楚主机与开发板的环境


同意您的观点。
[/Quote]
环境,环境
加载更多回复(15)

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧