当前位置: 技术问答>linux和unix
【求助,这个比较难】关于编译.ko文件的问题。
来源: 互联网 发布时间:2017-01-31
本文导语: 想实现一个交叉编译。在虚拟机上编译一个.KO文件,然后希望该模块可以在另一台开发板上运行。 虚拟机和开发板内核版本相同,2.6.23和2.6.28均试过。提示错误如下: insmod:hello.ko hello: version magic '2.6.28 SMP mod_unlo...
想实现一个交叉编译。在虚拟机上编译一个.KO文件,然后希望该模块可以在另一台开发板上运行。
虚拟机和开发板内核版本相同,2.6.23和2.6.28均试过。提示错误如下:
insmod:hello.ko
hello: version magic '2.6.28 SMP mod_unload modversions 686' should be '2.6.28 preempt mod_unload PENTIEM4'
insmod: cannot insert 'hello.ko': invalid module format.
提示完毕。
hello.c很简单。我就不写了。
makefile如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KBUILD := /lib/modules/2.6.28/build
modules:
make -C $(KBUILD) M=$(shell pwd) modules
clean:
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
rm -rf .tmp_versions
endif
makefile完毕。
build目录下makefile很长,暂时认为没有问题。
提示:虚拟机的cpu架构和开发板的架构是不一样的。
虚拟机为E7500,开发板为奔腾4。
请问关于架构相关的东西应该在哪里更改?
多谢!
虚拟机和开发板内核版本相同,2.6.23和2.6.28均试过。提示错误如下:
insmod:hello.ko
hello: version magic '2.6.28 SMP mod_unload modversions 686' should be '2.6.28 preempt mod_unload PENTIEM4'
insmod: cannot insert 'hello.ko': invalid module format.
提示完毕。
hello.c很简单。我就不写了。
makefile如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KBUILD := /lib/modules/2.6.28/build
modules:
make -C $(KBUILD) M=$(shell pwd) modules
clean:
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
rm -rf .tmp_versions
endif
makefile完毕。
build目录下makefile很长,暂时认为没有问题。
提示:虚拟机的cpu架构和开发板的架构是不一样的。
虚拟机为E7500,开发板为奔腾4。
请问关于架构相关的东西应该在哪里更改?
多谢!
|
我的主机是x86的, 开发板是 arm 的, 所以把交叉编译环境指定为arm的
你可以把你的交叉编译环境改成x86的 , 编译器也指定一下, 因为你现在默认的编译器应该不是x86的
然后kernle下的makefile就不用改了
你可以把你的交叉编译环境改成x86的 , 编译器也指定一下, 因为你现在默认的编译器应该不是x86的
然后kernle下的makefile就不用改了
|
如果你是交叉编译的话,必须得装目标平台所对应的toolchain。
比如你的目标平台是arm平台,编译器为/usr/local/bin/arm-none-linux-gnueabi-gcc
可以参考一下顺序:
1,把编译器的路径加入 PATH
打开个人配置文件 vi ~/.bashrc
追加行 export PATH=/usr/local/bin:$PATH
退出并保存 :wq
使刚才的修改生效 source ~/.bashrc
2,编译