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

发布于 2025-01-07 14:06:57 字数 571 浏览 2 评论 0原文

我正在尝试交叉编译一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冰雪之触 2025-01-14 14:06:57

感谢Eugene提示使用dmesg,我发现了错误:

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

Thanks to the hint of Eugene to use dmesg, I found the error:

version magic '2.6.37.6 mod_unload modversions ARMv5 ' should be '2.6.27.47-parrot preempt mod_unload ARMv5 '

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

泛滥成性 2025-01-14 14:06:57

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

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

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

只需修改环境

export LOCALVERSION=

即可

my ugly fix is modifing script file
"scripts/setlocalversion"

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

Hi, everyone.. I did found simple soulution.

just modify envirionment vairable

export LOCALVERSION=

that's all

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文