构建内核头文件以编译 R1Soft hcp 模块

构建内核头文件以编译 R1Soft hcp 模块

我正在运行基于 Xen 的 VM 和 CentOS 5,并且我的托管服务提供商从主机推送内核版本 2.6.37.6(因此没有 pv-grub)。

[root@dev ~]# uname -r
2.6.37.6

我正在尝试安装 R1Soft 代理,我需要为其构建 hcpdriver 模块。不幸的是,yum install kernel-develyum install kernel-xen-devel我尝试安装构建模块所需的内核头文件时,它没有成功(我猜这与我的托管服务提供商使用自定义内核有关)。

因此我继续从 kernel.org 下载内核,将其解压/usr/src/并运行:

zcat /proc/config.gz > .config
make oldconfig && make modules_prepare

现在我有了内核头文件,我构建了 hcpdriver 模块,但是当我尝试 modprobe/insmod 它时,我在 dmesg 中收到以下错误

hcpdriver: no symbol version for module_layout

我谷歌了一下错误,找到了一些关于 vermagic 的提示。但我新建的模块的 vermagic 与托管服务提供商提供的上一个模块相同(显然存在某种错误,R1Soft 支持要求我编译一个较新的版本)。

这是旧的有缺陷的版本 (由我的主机提供):
[root@dev r1soft]# modinfo hcpdriver.o
filename: hcpdriver.o
version: 4.1.1 build 13785
license: Proprietary
description: Linux Hot Copy Driver
author: Michael Brumlow
depends:
vermagic: 2.6.37.6 SMP mod_unload modversions

这是我根据新编译的内核头文件构建的新版本:
[root@dev r1soft]# modinfo hcpdriver-cki-2.6.37.6.ko
filename: hcpdriver-cki-2.6.37.6.ko
version: 4.2.1 build 16433
license: Proprietary
description: Linux Hot Copy Driver
author: Michael Brumlow
depends:
vermagic: 2.6.37.6 SMP mod_unload modversions

如您所见,vermagic它们完全相同。问题是,当我修改第一个模块时,它运行良好,但第二个模块却不能。

有人遇到过类似的问题吗?这是我第一次自己构建内核头文件,所以我不太确定我在这种情况下使用的过程是否正确。我还可以尝试其他方法吗?

更新 1
我再次从头开始执行该过程,从 kernel.org 重新下载 tar.gz,将其解压到 /usr/src/kernels,然后运行:

zcat /proc/config.gz > .config
make
make modules_install && make headers_install

一切顺利完成。

然后我运行:
r1soft-setup --get-module --no-binary
它也完成了并且没有错误,但是现在当我尝试 insmod 模块时,dmesg 报告:
hcpdriver: disagrees about version of symbol __memcpy
hcpdriver: Unknown symbol __memcpy (err -22)

提前致谢,乔治

答案1

不,我从未见过这个问题。但听起来很乱。这可能是托管支持问题。如果主机推送特定内核版本并且他们管理 R1Soft 安装,主机是否应该有一个可用的 hcp 模块或能够引导用户完成使事情正常运行所需的步骤?如果有的话,您可以尝试将hcp-setup相关信息上传到 R1Soft 的构建服务器。我从来没有在本地构建过模块,但我通常使用发行版内核或稍微修改过的发行版内核。

相关内容