加载交叉编译的内核模块时出错

Posted

技术标签:

【中文标题】加载交叉编译的内核模块时出错【英文标题】:Error when loading cross compiled kernel module 【发布时间】:2016-02-20 09:33:44 【问题描述】:

我已经交叉编译了一个简单的 helloworld 内核模块,主机是 x86 机器,目标是 ARM 板。当我做 modprobe 以在目标中安装模块时,我收到此消息:

FATAL: Could not load /lib/modules/3.14.0-xilinx-13567-g906a2c9-dirty/modules.dep: No such file or directory

我已确保该模块使用与目标相同的版本进行编译。

uname -a : 3.14.0-xilinx-13567-g906a2c9-dirty

modinfo: vermagic:       3.14.0-xilinx-13567-g906a2c9-dirty SMP preempt mod_unload modversions ARMv7 p2v8

可能是什么问题?这个错误是什么意思?

【问题讨论】:

欢迎来到 Stack Overflow!我编辑了您的问题,以便更容易阅读代码。祝你好运! modprobe 加载(或插入)模块到内核中,它不安装模块。你用什么命令install 模块到目标?是cp 命令还是make ... modules_install?顺便说一句,/lib/modules/3.14.0-xilinx-13567-g906a2c9-dirty/modules.dep 应该存在用于加载 any 模块,而不仅仅是您编译的模块。 【参考方案1】:

显然,您缺少指定模块依赖项的文件(在构建时生成并使用make module_install 安装)。

最简单的解决方案是,如果您的 mdule 没有外部依赖项,则使用 insmod 而不是 modprobe 插入它。

【讨论】:

【参考方案2】:

尝试运行:

depmod -a

在 ARM 板上。

它应该可以解决您的问题。

【讨论】:

【参考方案3】:

我会建议以下步骤。

    执行 insmod $module-name

    检查 dmesg 命令输出。如果您看到以下消息

版本魔法“3.14.0-xilinx-13567-g906a2c9-dirty xxxxxxxx”应该是 '3.14.0-xilinx-13567-g906a2c9-dirty xxxxxxxxxx'

那么问题是由于对内核所做的更改。

    将更改提交到 git 存储库并重新构建内核。

    创建一个新的内核映像,然后使用更新的内核启动目标。

【讨论】:

以上是关于加载交叉编译的内核模块时出错的主要内容,如果未能解决你的问题,请参考以下文章

在启动时加载linux内核模块

2.2内核模块编译

linux内核模块编译makefile

内核模块编译

Insmod模块加载过程分析

内核模块编译过程摘要记录