当前位置: 技术问答>linux和unix
insmod加载模块的错误
来源: 互联网 发布时间:2016-12-14
本文导语: 使用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 ...
使用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
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
|
KDIR := ../..
直接改
KDIR := 板子上的内核源码绝对路径
$(MAKE) -C $(KDIR) M=$(PWD) modules
会调用主makefile里的变量,包括arch和 CROSS_COMPILE
直接改
KDIR := 板子上的内核源码绝对路径
$(MAKE) -C $(KDIR) M=$(PWD) modules
会调用主makefile里的变量,包括arch和 CROSS_COMPILE
|
此外,确保你的板子上的内核就是这个源码目录编出来的
看样子没有找到根目录下的makefile
或者根目录下的makefile没有设置正确的ARCH 和 CROSS_COMPILE
|
test: version magic '2.6.25 mod_unload ' should be '2.6.25-mux1222-svn62-dirty28 mod_unload '
Up一下。
版本不一致啊,编译用的kernel 和 板上跑的kernel 版本不一致。
|
出现了这样的错误:
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试试,应该没问题了
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试试,应该没问题了
|
今天也有位同事碰到这种问题,内核版本号都是一样,就是跟LZ一样后面的字符串有些不同,无法insmod
换了KERNEL 源码重编了就好
也关注这个问题,看看到底能否避开这个问题加载成功
换了KERNEL 源码重编了就好
也关注这个问题,看看到底能否避开这个问题加载成功
|
insmod: cannot insert `./test.ko': Invalid module format (-1): Exec format error
------------------
你不会拿pc的gcc编译的吧
test: version magic '2.6.25 mod_unload ' should be '2.6.25-mux1222-svn62-dirty28 mod_unload '
-------------
内核目录不会用的也是pc上的吧
------------------
你不会拿pc的gcc编译的吧
test: version magic '2.6.25 mod_unload ' should be '2.6.25-mux1222-svn62-dirty28 mod_unload '
-------------
内核目录不会用的也是pc上的吧
|
貌似你的驱动模块是不是没有用板子对应的工具链编译的
|
把你的编译此模块的makefile贴来
|
这样的话应该用的是pc上的gcc吧
是不是啊deep_pro大大?
|
再加一句
CROSS_COMPILE = ../toolchain/arm-eabi-4.2.1/bin/arm-eabi-
应该就可以了
../toolchain/arm-eabi-4.2.1/bin/arm-eabi-
是工具链的路径名字,调用gcc的时候就会加上
那就变成
../toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc等等
CROSS_COMPILE = ../toolchain/arm-eabi-4.2.1/bin/arm-eabi-
应该就可以了
../toolchain/arm-eabi-4.2.1/bin/arm-eabi-
是工具链的路径名字,调用gcc的时候就会加上
那就变成
../toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc等等
|
LS正解
|
1. 用uname -a 查看开发板的linux版本。
2. 用 file 查看 file.ko的版本。
版本不一致,在编译file.ko内核模块时,把kernel 源代码的path指向你的开发板内核的源代码path即可,另外还要注意编译时的环境变量。
2. 用 file 查看 file.ko的版本。
版本不一致,在编译file.ko内核模块时,把kernel 源代码的path指向你的开发板内核的源代码path即可,另外还要注意编译时的环境变量。
|
nsmod: cannot insert `./test.ko': Invalid module format (-1): Exec format error
format error!!!!!!!!!!!!!!!!!!!!!!!!
format error!!!!!!!!!!!!!!!!!!!!!!!!
|
Lz,编译驱动的Makefile中,内核源码树必须是目标板内核源码树。
否则,加载不成功的
否则,加载不成功的
|
内核要和开发板的内核一样,交叉编译环境也是,继续关注中,期待楼主早日解决问题