內核熱補丁 - 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

分類：​

- 內核

內核熱補丁
新增話題