# Kernel live patching (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- Kernel module (简体中文)
- Kernel (简体中文)#编译
- Kexec

翻译状态：本文是 Kernel live patching 的翻译。上次翻译日期：2020-07-17。如果英文版本有所更改，则您可以帮助同步翻译。

内核热补丁 (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环境下经过测试。

## 参考

- 热补丁的内核文档
- wikipedia:Kpatch
- wikipedia:KGraft
- wikipedia:Ksplice

Category:

- Kernel (简体中文)