linux - 交叉编译内核模块 : how to set configs right

标签 linux arm cross-compiling kernel-module beagleboard

我正在尝试为 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/

相关文章:

python - Virtualenv 使用了错误的 python,即使它位于 $PATH 中的第一个

linux - 传递 shell 脚本变量以查找

assembly - ARM架构中的GT和HI指令有什么区别?

x86 - ELF 或二进制文件中有特定 ABI 的签名吗?

android - "/system/bin/linker: No such file or directory"尝试编译 TensorFlow 时出错

linux - 为 Raspberry Pi 交叉编译 Linux 内核 - ${CCPREFIX}gcc -v 不起作用

linux - 错误 : "linker ' cc' not found"when cross compiling a rust project from windows to linux using cargo

c - setsid() 什么时候有用,或者为什么我们需要在 Linux 中对进程进行分组?

linux - python3.4.3无法导入OpenCV

assembly - ARM 汇编 - 转换字节顺序