加载交叉编译的内核模块时出错
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 存储库并重新构建内核。
创建一个新的内核映像,然后使用更新的内核启动目标。
【讨论】:
以上是关于加载交叉编译的内核模块时出错的主要内容,如果未能解决你的问题,请参考以下文章