交叉编译内核模块:如何正确设置配置

时间:2012-07-19 09:47:31

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

我正在尝试为Beaglebone(Linux,ARM)交叉编译外部模块。为了避免内核版本问题,我使用主机上的CodeSourcery工具链(x86)抓取内核tarball并为ARM交叉编译。然后我使用与完全相同的内核源完全相同的工具链交叉编译外部hello-world模块。我使用了这个简单的makefile:

obj-m += hello-1.o

all:
   make -C /home/***/****/linux-3.2.0-beaglebone-20120411.00              
M=$(PWD) modules

clean:
    make -C /home/***/****/linux-3.2.0-beaglebone-20120411.00 M=$(PWD) clean

当我将ko文件复制到目标并尝试insmod时,我得到:“insmod:错误插入'hello-1.ko': - 无效的模块格式”(从我在这个组中学到的和在其他地方)通常源于冲突的内核版本,实际上目标上的uname -a给出:

  

Linux beaglebone 3.2.18#1 Wed Wed 30 14:21:54 CEST 2012 armv7l GNU / Linux

而modinfo hello-1.ko给出:

  

srcversion:140276773A3090F6F33891F   取决于:
  vermagic:3.2.0+ mod_unload modversions ARMv5 p2v8

版本3.2.18与3.2.0+(为什么是+?)和armv7l与ARMv5相比!

有没有人知道为什么我会得到不同的版本,虽然我编译了相同的内核源(可能是一些配置)?

任何建议都表示赞赏!

最好的, 克里斯

1 个答案:

答案 0 :(得分:1)

答案是,你应该运行你在beagle board上编译的内核。

'+'表示您修改了源树。

最后确保您正在使用正确的defconfig。 'make beagle_defconfig'应该有用。