2

我正在尝试为 Beaglebone(Linux、ARM)交叉编译一个外部模块。为了避免内核版本问题,我抓取了一个内核 tarball,并使用主机(x86)上的 CodeSourcery 工具链为 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: error inserting 'hello-1.ko': -1 Invalid module format”(从我在本组和其他地方学到的)通常源于冲突的内核版本,实际上 uname -a on the target 给出了:

Linux beaglebone 3.2.18 #1 Wed May 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!

有谁知道为什么我得到不同的版本,尽管我是针对相同的内核源编译的(也许是一些配置)?

任何建议表示赞赏!

最好的,克里斯

4

1 回答 1

1

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

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

最后确保您使用正确的 defconfig。'make beagle_defconfig' 应该可以工作。

于 2012-07-19T10:00:21.220 回答