内核热补丁

出自 ArchWiki

内核热补丁 (KLP) 允许在不重启整个系统的情况下快速修复内核。自 4.0 版本以来,相关的补丁已被接受 [1][2][3],因此可以配置内核以启用此功能。通常,KLP 通过以下步骤实现

  1. 获取正在运行内核的源代码树
  2. 准备针对内核的补丁
  3. 应用一些工具(如下所示)来帮助转换和加载补丁

在 KLP 获得官方支持之前,一些项目提供了热补丁实用程序,例如 Oracle 的 ksplice、SuSE 的 #kGraft 和 Red Hat 的 #kpatch。它们以不同的方式实现了 KLP 功能。进入主流内核的最小化功能补丁集源自 kpatch 和 kGraft。

kpatch

安装

安装 kpatchAUR 以用于合适的内核,以及 kpatch-gitAUR 以用于用户空间工具。

您也可以通过启用 CONFIG_LIVEPATCHCONFIG_DEBUG_INFOCONFIG_KALLSYMS 手动构建支持 kpatch 使用的内核。

注意: 在安装特殊的内核后,请记住更新引导加载程序

用法

成功构建这两个软件包并在重启后,您可以

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

假设您已完成一些修改,并在工作目录中有一个补丁 some.patch(针对 makepkg -o 后的源代码树,而不是 x.y 版本的 vanilla 内核)。启动 kpatch 实用程序,

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

此命令涉及两个内核构建,原始内核和已打补丁的内核,因此可能需要一段时间才能完成。构建完成后,同一目录中应该有一个 kpatch-some.ko 模块。然后,

# insmod kpatch-some.ko

应该可以解决问题。

有关更多信息,请查阅 manpages 或 GitHub 存储库

kGraft

本文或本节需要扩充。

原因: 没有有用的信息。(在 Talk:Kernel live patching 中讨论)

KGraft 尚未在 Arch 环境中进行测试。

参见