我们只能在内核源代码树中重新编译内核模块吗?

Posted

技术标签:

【中文标题】我们只能在内核源代码树中重新编译内核模块吗?【英文标题】:Can we only recompile a kernel module in kernel source tree? 【发布时间】:2013-08-29 05:34:47 【问题描述】:

假设我们安装一个内核2.6.32.el6,然后我们下载2.6.32.el6.src.rpm,我们可以只安装源并修改一些模块,然后使用make -C 2.6.32.el6 .src.source.directry -M$PWD 在模块目录下编译模块,然后我们复制到/lib/modules/2.6.32.el6/kernel/moduledirectory 新的模块就可以了?

我尝试修改kvm模块并编译它,但是当我重新编译模块并将其复制到目录中时,机器在启动时说:

kvm: module_layout 没有符号版本 kvm_intel: module_layout 没有符号版本

有谁知道怎么回事?

【问题讨论】:

【参考方案1】:

可能 linux 内核 2.6.32.el6 已使用 modversions 编译,但您的模块编译时没有使用它。检查您是否在内核配置文件中选择或取消选择了 CONFIG_MODVERSIONS。将它与 /proc/.config 文件进行比较,该文件是内核配置文件 - 当然如果你有的话。

换句话说 - 可能您的 linux 内核要求模块支持版本控制,但您的模块不提供它。

【讨论】:

以上是关于我们只能在内核源代码树中重新编译内核模块吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何重新编译linux内核

sh dkms linux内核模块在ubuntu上重新编译

Mac下重新编译Linux内核

驱动编译进内核和编译模块的区别

Insmod模块加载过程分析

Centos 7 源码编译安装内核4.14.12