内核热补丁
内核热补丁 (KLP) 允许在不重启整个系统的情况下快速修复内核。自 4.0 版本以来,相关的补丁已被接受 [1][2][3],因此可以配置内核以启用此功能。通常,KLP 通过以下步骤实现
- 获取正在运行内核的源代码树
- 准备针对内核的补丁
- 应用一些工具(如下所示)来帮助转换和加载补丁
在 KLP 获得官方支持之前,一些项目提供了热补丁实用程序,例如 Oracle 的 ksplice、SuSE 的 #kGraft 和 Red Hat 的 #kpatch。它们以不同的方式实现了 KLP 功能。进入主流内核的最小化功能补丁集源自 kpatch 和 kGraft。
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 版本的 vanilla 内核)。启动 kpatch 实用程序,
$ kpatch-build -s $(pwd) -v $(pwd)/vmlinux some.patch
此命令涉及两个内核构建,原始内核和已打补丁的内核,因此可能需要一段时间才能完成。构建完成后,同一目录中应该有一个 kpatch-some.ko 模块。然后,
# insmod kpatch-some.ko
应该可以解决问题。
有关更多信息,请查阅 manpages 或 GitHub 存储库。
kGraft
KGraft 尚未在 Arch 环境中进行测试。