内核热补丁

来自 Arch Linux 中文维基
(重定向自Kernel live patching

内核热补丁 (Kernel Live Patching, KLP) 允许在不重启整个操作系统的前提下进行内核的快速修复。从 4.0 版本开始,这个功能被加入内核 [1][2][3],用户可以配置他们的的内核来启用这项功能。通常来讲,内核热补丁通过以下的步骤实现:

  1. 获取正在运行的源代码树
  2. 准备针对内核的补丁
  3. 使用一些工具(随后)来修正并应用补丁

在内核热补丁被官方支持前,一些项目提供了热补丁工具。如甲骨文的 ksplice,SuSE 的 #kGraft,和红帽的 #kpatch。他们用不同的方法实现了内核热补丁。而内核加入的最基础的功能是从 kGraft 和 kpatch 派生出来的。

kpatch[编辑 | 编辑源代码]

安装[编辑 | 编辑源代码]

kpatchAUR 安装 一个适当的内核,和 kpatch-gitAUR 对应的用户界面工具。

你也可以通过启用CONFIG_LIVEPATCH, CONFIG_DEBUG_INFO, 和 CONFIG_KALLSYMS,来手动编译支持kpatch的内核。

注意: 安装特定的内核后需要更新 启动加载器

使用方法[编辑 | 编辑源代码]

两个包都安装好、并重启后,你可以执行

$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y
$ cd $ROOTDIR

假设你已经完成了一些修改,并在工作目录下生成了一个some.patch补丁 (是执行makepkg -o后针对您自己的源代码树的补丁,而不是针对x.y版本的原始内核补丁)。启动kpatch实用工具:

$ kpatch-build -s $(pwd) -v $(pwd)/vmlinux some.patch

这个命令涉及原始的和修改后的内核的编译,因此可能会多花一些时间。编译结束后,同目录下会出现一个kpatch-some.ko模块。现在,

# insmod kpatch-some.ko

就可以为内核打上补丁了。

更多信息,请查阅手册页或GitHub存储库

kGraft[编辑 | 编辑源代码]

KGraft没有在Arch linux环境下经过测试。

参考[编辑 | 编辑源代码]