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

标签 c linux linux-kernel rhel

假设我们安装一个内核 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 没有符号版本

谁知道哪里出了问题?

最佳答案

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

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

关于我们只能重新编译内核源代码树中的内核模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503014/

相关文章:

linux - 您如何处理 Linux 中表现不佳的第 3 方进程?

c++ - 使用混合 C/C++ header 在 C 中使用 C++ 对象

c - 在 C : how is result variable initialized? 中通过引用传递

c - 当我打开文件时会发生什么(RAM 和 ROM 很重要)

linux - sleep() 是否通过在等待结束时发送一些信号来唤醒进程?

regex - 删除 key :value pair from json file using shell script

security - 应用最后一个 redhat 内核补丁后 Tomcat 无法启动

random - 在内核模块中获取/dev/random

c - 如何在嵌入式 Linux 上找到显示库

捕获子进程的退出状态码