内核驱动版本匹配与 .ko 模块——每换内核就要重新激活
为什么要版本匹配
Linux 内核版本和内核模块(.ko)是严格绑定的——内核模块编译时用的是特定版本的内核头文件,不同内核版本的模块不能混装。
内核 4.19.157-perf+ → 需要 4.19.157 编译出来的 jshook.ko
内核 5.10.89-android12+ → 需要 5.10.89 编译出来的 jshook.ko
如果模块和内核版本不匹配,insmod 时会直接报错。
JsHook 怎么处理
激活流程里这一步完全自动化:
- 读
/proc/version或执行uname -r→ 拿到当前内核版本 - 在已部署的内核驱动包中找版本号匹配的
.ko - 加载进内核
- 驱动成功加载 → 内核驱动模式可用
整个过程几秒钟,用户感知不到。
什么情况下需要重新激活
以下操作会改变内核版本,导致之前激活部署的 .ko 失效:
| 操作 | 内核版本变化 | 需要重新激活 |
|---|---|---|
| 升级 Android 系统(OTA) | 可能变 | ✅ 建议重新激活 |
| 刷入新 ROM | 一定变 | ✅ 必须重新激活 |
| Magisk / KernelSU 更新内核 | 可能变 | ✅ 重新激活保险 |
| 切换虚拟机 / 模拟器实例 | 内核不同 | ✅ 新实例里重新激活 |
| 小版本系统补丁 | 通常不变 | 视内核版本号而定 |
怎么确认内核版本变了
adb shell uname -r
# 之前是 4.19.157-perf+
# 现在是 5.10.101-android13-xxx ← 变了
或者在 JsHook 激活日志里看——激活时会打印当前内核版本和加载的 .ko 文件名。
重新激活的流程
- 确认脚本和订阅都备份好了
- 打开 JsHook
- 进设置,找「清数据」或直接系统设置里清应用数据
- 可选:手动删
/data/adb/jshook/确保干净 - 重新点激活
小版本升级(Android 安全补丁、Magisk 小版本)通常不用手动清,重新激活就行。
找不到对应 .ko 怎么办
极少数设备的内核版本不在 JsHook 提供的驱动列表里:
- 定制 ROM 的特殊内核版本
- 极新或极旧的 Android 版本
- 虚拟机的特殊内核
这种情况下:
- 激活本身还是会成功(基础注入不需要内核驱动)
- 只是内核驱动模式开关打开时会报错
- 正常用普通 fridamod 注入就行,不受影响
- 去 JsHook GitHub Issue 或 Telegram 群反馈你的内核版本号
查内核驱动状态的命令
# 查内核版本
adb shell uname -r
# 查驱动是否已加载
adb shell su -c lsmod | grep jshook
adb shell su -c cat /proc/modules | grep jshook
# 查部署的驱动文件
adb shell su -c ls -la /data/adb/jshook/.kernel/
# 查内核日志
adb shell su -c dmesg | grep jshook