2012-07-19 43 views
1

我试图为Beaglebone(Linux,ARM)交叉编译一个外部模块。为了避免内核版本问题,我抓取了一个内核tarball并为ARM编译在主机(x86)上使用CodeSourcery工具链。然后,我用完全相同的工具链针对完全相同的内核源码交叉编译外部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’:-1无效的模块格式”这(从我这个组中的教训和其他地方)通常相互冲突的内核版本茎,目标确实UNAME -a可提供:

的Linux 3.2.18 beaglebone 1号周三14点21分54秒5月30日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 VS 。ARMv5!

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

任何建议表示赞赏!

最好, 克里斯

回答

1

答案是,你应该运行“你的Beagle Board编译内核。

“+”表示您修改了源树。

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