Kernel live patching (简体中文) - ArchWiki

Jump to content

# Kernel live patching (简体中文)

From ArchWiki

相关文章

- 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 (简体中文)