我正在尝试为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相比!
有没有人知道为什么我会得到不同的版本,虽然我编译了相同的内核源(可能是一些配置)?
任何建议都表示赞赏!
最好的, 克里斯
答案 0 :(得分:1)
'+'表示您修改了源树。
最后确保您正在使用正确的defconfig。 'make beagle_defconfig'应该有用。