内核热补丁 - Arch Linux 中文维基

跳转到内容

# 内核热补丁

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Kernel live patching，最近一次同步于 2020-07-17，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- Kernel module
- Kernel#编译
- Kexec

内核热补丁 (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

分类：​

- 内核

内核热补丁
添加话题