如何使用为不同内核版本构建的内核模块?

如何使用为不同内核版本构建的内核模块?

我有一个基于内核版本 3.17 构建的 .ko 文件和 nvme.h 文件,我正尝试将此 .ko 文件复制到装有内核版本 3.19 的 ubuntu 14.04 的机器上。我还复制了 nvme.h 文件

当我在复制 .ko 文件后尝试执行 rmmod nvme 时,系统会给出错误,提示当前未加载 nvme 模块。我备份了原始 .ko 和 nvme.h 文件,当我将其复制回来并运行 rmmod nvme 时,它​​运行正常。我需要使用更新的 .ko 和 nvme.h 文件。任何指示都会有帮助吗?我如何才能成功将其移植到 3.19。请提出建议。

答案1

不可以。每个模块都是针对特定内核版本编译的,不能用于与该版本不同的内核。

您需要获取.ko您正在运行的特定内核的文件,或者自己为该内核重新编译它。

答案2

是的,可以。但是如果版本差异太大(例如,在树之间),它可能会污染内核,或者找不到某些符号。

如果 modprobe -f 不起作用,您必须修补该模块。

https://github.com/D1W0U/ARP-RootKit/blob/master/patch-lkm.py

相关内容