嵌入 KPM 到内核 — 首次修补和安装后两种方式
什么是嵌入模式
嵌入(Embed)是 KPM 的三种安装方式中最常用的一种——把 KPM 模块的二进制直接打补丁嵌进 boot.img 的内核里。这样:
- KPM 会在 pre-kernel-init 阶段加载——内核刚启动、Android 系统还没起来的时候就生效
- 每次开机自动生效,不需要用户手动加载
- 和 boot.img 绑定在一起,刷机时一起刷入
方式一:首次修补时嵌入
这是最常用的方式,在你第一次修补 boot.img 时就把 KPM 嵌进去:
- 打开 APatch 管理器,点击"选择一个启动镜像并修补"
- 选择原厂 boot.img
- 设好超级密钥
- 不要立刻点"开始修补"——先点击"嵌入模块"按钮
- 在文件选择器里找到你想嵌入的
.kpm文件 - 管理器会让你确认要嵌入的 KPM 名称
- 确认后继续修补流程
修补完成后生成的 boot.img 里就同时包含了 KernelPatch 和你指定的 KPM。
方式二:安装 APatch 后嵌入
如果已经装好了 APatch,又想追加一个 KPM:
- 进入"内核模块"(KPM)页面
- 点击右下角的浮动按钮
- 选择"嵌入"
- 选好 KPM 文件
这里有个问题:嵌入操作本质上还是要重新修补 boot.img——你需要重新执行整个修补和刷入流程。所以安装后嵌入的完整步骤是:
1. 进入内核模块页面 → 嵌入 → 选 KPM 文件
2. 重新修补原厂 boot.img(这次管理器会同时嵌入 KernelPatch 和 KPM)
3. fastboot flash boot 刷入新的修补产物
4. 重启设备
KPM 文件格式
KPM 模块的文件后缀是 .kpm——它本质上是一个 ELF 格式的内核模块文件。KernelPatch 在嵌入时会处理内核符号解析和重定位。
可以嵌入多少个
理论上可以嵌入多个 KPM,但注意:
- 每个额外嵌入的 KPM 会增加 boot.img 的大小
- KPM 之间可能有冲突(比如都想 hook 同一个内核函数)
- 嵌入式的 KPM 不能单独禁用——要么在修补时决定要不要嵌入,要么重新修补
如果需要灵活开关,考虑用"加载"方式。
关于 kptools 命令行嵌入
手动修补时,也可以用 kptools 命令行嵌入 KPM:
./kptools-linux -p --image kernel-b --skey "YourKey" \
--kpimg kpimg-android --out kernel \
--embed your-module.kpm
多个 KPM 用多个 --embed 参数依次指定。