交叉编译内核模块:模块格式无效
我正在尝试交叉编译一个 helloworld 内核模块,其规格为:
- 主机:intel x86 32 位,linux-3.0.0
- ARM 机器(Parrot AR.Drone),linux-2.6.27.47
我正在使用 makefile:
PWD := $(shell pwd)
obj-m := test.o
all:
$(MAKE) -C /path/to/kernel M=$(PWD) CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules
目标: arm-none-linux-gnueabi-
是arm工具链的前缀。
作为内核,我尝试使用来自 git://github.com/CyanogenMod/cm-kernel.git 的克隆作为内核。这是 2.6 内核的分支。使用这个内核,编译成功。当尝试插入模块时,它给出了错误:
invalid module format
遗憾的是,它说的很少。
I'm trying to cross compile a helloworld kernel module with specifications:
- host: intel x86 32 bit, linux-3.0.0
- target: ARM machine (Parrot AR.Drone), linux-2.6.27.47
I'm using the makefile:
PWD := $(shell pwd)
obj-m := test.o
all:
$(MAKE) -C /path/to/kernel M=$(PWD) CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules
Where arm-none-linux-gnueabi-
is the prefix of the arm toolchain.
As kernel, I tried using a clone from git://github.com/CyanogenMod/cm-kernel.git
as kernel. This is a 2.6 kernel fork. Using this kernel, compilation was successfull. When trying to insert the module, it gives the error:
invalid module format
Which, sadly, says very little.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感谢Eugene提示使用
dmesg
,我发现了错误:结论:编译内核模块时,不仅需要版本匹配,还需要一些配置参数。通过使用正确的版本并编辑配置解决了我的问题。
如果您不想重新配置所有内容,一个快速(丑陋)的修复方法是编辑
include/ generated/autoconf.h
Thanks to the hint of Eugene to use
dmesg
, I found the error:Conclusion: when compiling a kernel module, not only versions need to match, but also some config-parameters. My problem was solved by using the right version and editing the configuration.
If you don't want to reconfigure everything, a quick (ugly) fix is to edit
include/generated/autoconf.h
我的丑陋修复是修改脚本文件
“scripts/setlocalversion”
大家好..我确实找到了简单的解决方案。
只需修改环境
即可
my ugly fix is modifing script file
"scripts/setlocalversion"
Hi, everyone.. I did found simple soulution.
just modify envirionment vairable
that's all