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

Jen*_*man 4 arm cross-compiling kernel-module linux-kernel

我试图交叉编译具有规范的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
Run Code Online (Sandbox Code Playgroud)

arm-none-linux-gnueabi-arm工具链的前缀在哪里。

作为内核,我尝试使用来自git://github.com/CyanogenMod/cm-kernel.git内核的克隆。这是一个2.6内核派生。使用该内核,编译成功。尝试插入模块时,出现错误:

invalid module format
Run Code Online (Sandbox Code Playgroud)

可悲的是,这说得很少。

Jen*_*man 6

由于使用了Eugene的提示dmesg,我发现了错误:

version magic '2.6.37.6 mod_unload modversions ARMv5 ' should be '2.6.27.47-parrot preempt mod_unload ARMv5 '
Run Code Online (Sandbox Code Playgroud)

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

如果您不想重新配置所有内容,则可以通过快速(丑陋)的修复方法进行编辑 include/generated/autoconf.h