我正在尝试为 Beaglebone(Linux、ARM)交叉编译一个外部模块。为了避免内核版本问题,我抓取了一个内核 tarball 并使用主机上的 CodeSourcery 工具链为 ARM 交叉编译(x86) .然后我使用完全相同的工具链针对完全相同的内核源代码交叉编译了一个外部 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 给出:
Linux beaglebone 3.2.18 #1 Wed May 30 14:21:54 CEST 2012 armv7l GNU/Linux
而 modinfo hello-1.ko 给出:
srcversion: 140276773A3090F6F33891F depends:
vermagic: 3.2.0+ mod_unload modversions ARMv5 p2v8
所以版本 3.2.18 与 3.2.0+(为什么是 +?)以及 armv7l 与 ARMv5!
有谁知道为什么我得到不同的版本,尽管我是针对相同的内核源代码(可能是一些配置)编译的?
如有任何建议,我们将不胜感激!
最好的, 克里斯
最佳答案
答案是,你应该运行“你在 beagle board 上编译的内核”。
'+' 表示您修改了源代码树。
最后确保您使用的是正确的 defconfig。 'make beagle_defconfig' 应该可以工作。
关于linux - 交叉编译内核模块 : how to set configs right,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558136/