98 lines
1.6 KiB
Markdown
98 lines
1.6 KiB
Markdown
|
|
使用指南
|
|||
|
|
----------
|
|||
|
|
|
|||
|
|
## 制作内核热补丁
|
|||
|
|
|
|||
|
|
### 环境准备
|
|||
|
|
|
|||
|
|
安装依赖软件包
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
yum install -y make gcc patch bison flex openssl-devel kpatch kpatch-runtime
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
安装当前内核源码和开发包
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
yum install -y kernel-source-`uname -r` kernel-debuginfo-`uname -r` kernel-devel-`uname -r`
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
进入热补丁制作目录并准备环境
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /opt/patch_workspace
|
|||
|
|
rm -rf kernel-source .config
|
|||
|
|
ln -s /usr/src/linux-`uname -r`/ kernel-source
|
|||
|
|
ln -s /usr/src/linux-`uname -r`/.config .config
|
|||
|
|
ln -s /usr/lib/debug/lib/modules/`uname -r`/vmlinux vmlinux
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
支持两种方式制作内核热补丁
|
|||
|
|
|
|||
|
|
### 方法1:直接修改源代码的方式
|
|||
|
|
|
|||
|
|
进入内核源码目录(下面以修改fs/proc/cmdline.c文件为例)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd kernel-source
|
|||
|
|
cd fs/proc/
|
|||
|
|
cp cmdline.c cmdline.c.new
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
修改cmdline.c.new中的函数
|
|||
|
|
|
|||
|
|
开始制作热补丁
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
./make_hotpatch -d .new -i cmdline
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
参数说明:
|
|||
|
|
|
|||
|
|
-d 后面跟上前面cp操作时的唯一后缀名。
|
|||
|
|
|
|||
|
|
-i 后跟补丁ID,可包括字母和数字。
|
|||
|
|
|
|||
|
|
### 方法2:通过patch文件的方式
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
./make_hotpatch -i cmdline -p cmdline.patch
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
参数说明:
|
|||
|
|
|
|||
|
|
-p patch文件路径
|
|||
|
|
|
|||
|
|
补丁制作完成,补丁文件以压缩包的格式存放于/opt/patch_workspace/hotpatch目录下
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 管理热补丁
|
|||
|
|
|
|||
|
|
### 加载热补丁
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
livepatch -l klp_cmdline.tar.gz
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 激活热补丁
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
livepatch -a cmdline
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
此时热补丁已生效,缺陷函数已被修复。
|
|||
|
|
|
|||
|
|
### 回退热补丁
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
livepatch -d cmdline
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 卸载热补丁
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
livepatch -r cmdline
|
|||
|
|
```
|
|||
|
|
|