update README doc
Signed-off-by: HuBin95 <hubin73@huawei.com>
This commit is contained in:
parent
b1ac1bd765
commit
5df73ddec7
57
README.md
57
README.md
@ -28,10 +28,11 @@ https://github.com/dynup/kpatch
|
||||
- 内核问题定位
|
||||
- 开发调试
|
||||
|
||||
<b>注:内核热补丁加载激活之后,若机器重启,则热补丁失效,需重新加载激活才能继续生效。</b>
|
||||
<b>注1</b>:内核热补丁加载激活之后,若机器重启,则热补丁失效,需重新加载激活才能继续生效。
|
||||
|
||||
若需要机器重启后自动加载激活热补丁,可编写启动执行脚本,在脚本里加载激活指定的热补丁。
|
||||
|
||||
<b>注2</b>:热补丁存在一定的<b><i>约束限制</i></b>,部分场景下无法做补丁,详见最后一节。
|
||||
|
||||
## 环境准备
|
||||
|
||||
@ -187,3 +188,57 @@ rpmbuild -ba kpatch/kpatch.spec
|
||||
rpm -Uvh ~/rpmbuild/RPMS/`arch`/kpatch*.rpm
|
||||
rpm -Uvh ~/rpmbuild/RPMS/noarch/kpatch*.rpm
|
||||
```
|
||||
|
||||
## 热补丁约束限制
|
||||
|
||||
### 不支持的函数修改行为
|
||||
|
||||
- 不支持修改函数参数或返回值类型或个数。
|
||||
- 不支持删除函数。
|
||||
- 不支持修改数据结构成员(热补丁原理是做函数替换)。
|
||||
|
||||
### 不支持的文件修改行为
|
||||
|
||||
- 不支持修改汇编文件。
|
||||
- 不支持修改头文件。
|
||||
- 不支持修改非C语言编写的文件。
|
||||
|
||||
### 不支持的变量修改行为
|
||||
|
||||
- 不允许删除全局变量或函数内部静态局部变量。
|
||||
- 不支持修改全局变量或静态局部变量初始值。
|
||||
- 不支持新增同名静态局部变量。
|
||||
- 不支持修改多个同名静态局部变量的引用顺序。
|
||||
|
||||
### 不支持的函数类型
|
||||
|
||||
- 不支持对初始化函数打补丁(初始化函数只执行一次,补丁函数执行不到)。
|
||||
- 不支持对死循环、不退出函数打补丁(旧函数不退出调用栈,没有机会调用新函数)。
|
||||
- 不允许对NMI中断的处理函数打补丁( stop machine无法stop住NMI中断处理流程,补丁无法保证对该类函数打补丁的一致性和安全性)。
|
||||
- 不支持对修改前后内敛情况发生变化的函数打补丁。
|
||||
- 不支持编译器生成的函数名称在修改前后发生变化的函数打补丁,例如修改前编译器生成的函数名为“ do_oops_enter_exit.part.0”,修改后编译器生成的函数名为“ do_oops_enter_exit”。
|
||||
- 不支持对arm64架构下长度小于4条指令的超小函数打补丁。(这种情况可以通过对外围函数打补丁来解决)
|
||||
- 不支持对启用ftrace、 kprobe等修改指令机制的函数打补丁。(打热补丁会使被修改函数的ftrace/kprobe机制失效)
|
||||
- 不支持对以下idle进程相关函数打补丁:
|
||||
- `call_cpuidle`
|
||||
- `cpuidle_idle_call`
|
||||
- `do_idle`
|
||||
- 不支持对包含以下弱符号的函数打补丁。
|
||||
- `kallsyms_addresses`
|
||||
- `kallsyms_num_syms`
|
||||
- `kallsyms_names`
|
||||
- `kallsyms_markers`
|
||||
- `kallsyms_token_table`
|
||||
- `kallsyms_token_index`
|
||||
- `kallsyms_offsets`
|
||||
- 不支持对包含下列范围之外的其他代码段的函数打补丁:
|
||||
- ` .text`
|
||||
- `__bug_table`
|
||||
- `.fixup`
|
||||
- `__ex_table`
|
||||
- `__jump_table`
|
||||
- `.smp_locks`
|
||||
- `.parainstructions`
|
||||
- `.altinstructions`
|
||||
|
||||
- 不支持在 `.altinstructions` 段中修改 `ALTINSTR_ENTRY_CB` 类型 `alt_instr` 的函数打补丁。例如 arm64 架构下 kvm 模块中的 kern_hyp_va 函数。
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
Name: kpatch
|
||||
Epoch: 1
|
||||
Version: 0.9.7
|
||||
Release: 3
|
||||
Release: 4
|
||||
Summary: A Linux dynamic kernel patching infrastructure
|
||||
|
||||
License: GPLv2
|
||||
@ -116,6 +116,12 @@ popd
|
||||
%{_mandir}/man1/*.1.gz
|
||||
|
||||
%changelog
|
||||
* Tue Aug 1 2023 Bin Hu <hubin73@huawei.com> -1:0.9.7-4
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:update README doc
|
||||
|
||||
* Sat Jul 29 2023 Zhipeng Xie <xiezhipeng1@huawei.com> -1:0.9.7-3
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user