首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉编译内核模块:无效模块格式

问交叉编译内核模块:无效模块格式
EN

Stack Overflow用户
提问于 2012-02-18 13:43:33
回答 2查看 12.1K关注 0票数 4

我试图交叉编译具有规范的helloworld内核模块:

linux-3.0.0

  • target:

  • 主机: intel x86 32位, ARM机(鹦鹉AR.Drone),linux-2.6.27.47

我用的是makefile:

代码语言:javascript
复制
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内核叉。使用这个内核,编译是成功的。当尝试插入模块时,它会给出错误:

代码语言:javascript
复制
invalid module format

可悲的是,这说明不了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-20 14:21:12

由于尤金暗示要使用dmesg,我发现了错误:

代码语言:javascript
复制
version magic '2.6.37.6 mod_unload modversions ARMv5 ' should be '2.6.27.47-parrot preempt mod_unload ARMv5 '

结论:在编译内核模块时,不仅需要版本匹配,而且还需要一些配置参数.通过使用正确的版本和编辑配置解决了我的问题。

如果您不想重新配置所有的东西,那么一个快速的(丑陋的)修复就是编辑include/generated/autoconf.h

票数 7
EN

Stack Overflow用户

发布于 2016-03-23 07:59:55

我丑陋的修复是修改脚本文件“script /setlocalversion”

代码语言:javascript
复制
170         if test "${LOCALVERSION+set}" != "set"; then
171                 scm=$(scm_version --short)
172 #               res="$res${scm:++}"
173                 res="${res}"
174         fi

大家好..。我确实找到了简单的解决办法。

只是改善了环境

代码语言:javascript
复制
export LOCALVERSION=

就这样

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9341701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档