此仓库是一个基于 KernelPatch 的内核模块构建脚手架(KPM 构建工具链整合)。
- 用途:自动拉取 / 使用
KernelPatch源码并通过CMake+Android NDK 工具链构建.kpm模块,便于在桌面环境(如 Linux、WSL)上开发和编译内核模块。 - 特点:提供 CMake 构建系统支持、IDE(IntelliSense)友好配置、自动化脚本与详细的配置步骤。
本项目参考以下开源项目,特此致谢:
- KPM-Build-Anywhere —— 原始的跨平台 KPM 构建方案
- KernelPatch —— 强大的内核补丁与模块框架
如果你基于本项目进行开发或分发,欢迎在项目文档中引用或致谢上述项目。如果跑不起来,可以使用上游项目;
sudo apt update
sudo apt install -y build-essential cmake git wget unzip curl ca-certificates \
openjdk-11-jdk python3 pkg-config如果你还没有 NDK,下载并解压(以 r25c 为例):
mkdir -p ~/Android/Sdk/ndk
cd ~/Android/Sdk/ndk
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip
mv android-ndk-r25c ndk-r25c如果有NDK,在 .env 文件中指定NDK路径
NDK_PATH=$HOME/Android/Sdk/ndk/ndk-r25c./build.sh输出位置:build/<模块名>/<模块名>.kpm
需要先构建一次所有的模块
./build.sh
cmake --build build --target hello在 Windows 11 上推荐使用 WSL2, ide最好是使用 vscode (笔者实践);
# 安装 WSL2 和 Ubuntu 22.04
wsl --install -d ubuntu-22.04
# 启动 WSL
wsl进入 WSL 后,按照上面的 Linux 步骤(1-5)操作即可。
Tips:
- 将项目代码保存在 WSL 文件系统(
~)而非/mnt/c(Windows 文件系统)以获得更好的 I/O 性能。 - 使用
adb push build/module/module.kpm /data/local/tmp/推送.kpm文件到 Android 设备。
如果你要创建自己的内核模块,参考以下示例:
// 1. 模块名(必须唯一)
KPM_NAME("kpm-your-module");
// 2. 版本信息
KPM_VERSION("1.0.0");
// 3. 许可证
KPM_LICENSE("GPL v2");
// 4. 作者
KPM_AUTHOR("Your Name");
// 5. 描述
KPM_DESCRIPTION("Your module description");
// 6. 回调函数
static long your_init(const char *args, const char *event, void *__user reserved) {
pr_info("Module loaded\n");
return 0;
}
static long your_exit(void *__user reserved) {
pr_info("Module unloaded\n");
return 0;
}
// 7. 注册回调
KPM_INIT(your_init);
KPM_EXIT(your_exit);