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

时间:2012-02-18 13:43:33

标签: linux-kernel arm cross-compiling kernel-module

我正在尝试使用规范交叉编译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内核的fork。使用此内核,编译成功。尝试插入模块时,会出现错误:

invalid module format

遗憾的是,很少说。

2 个答案:

答案 0 :(得分:4)

由于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

答案 1 :(得分:0)

我的丑陋修复是修改脚本文件 "脚本/ setlocalversion"

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

大家好..我确实找到了简单的洗液。

只需修改envirionment vairable

export LOCALVERSION=

全部