Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

仓库作用

此仓库是一个基于 KernelPatch 的内核模块构建脚手架(KPM 构建工具链整合)。

  • 用途:自动拉取 / 使用 KernelPatch 源码并通过 CMake+Android NDK 工具链构建 .kpm 模块,便于在桌面环境(如 Linux、WSL)上开发和编译内核模块。
  • 特点:提供 CMake 构建系统支持、IDE(IntelliSense)友好配置、自动化脚本与详细的配置步骤。

上游与致谢

本项目参考以下开源项目,特此致谢:

如果你基于本项目进行开发或分发,欢迎在项目文档中引用或致谢上述项目。如果跑不起来,可以使用上游项目;

快速开始

1. 安装依赖(Ubuntu 22.04)

sudo apt update
sudo apt install -y build-essential cmake git wget unzip curl ca-certificates \
  openjdk-11-jdk python3 pkg-config

2. 准备与配置 Android NDK

如果你还没有 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

4. 构建所有模块

./build.sh

输出位置build/<模块名>/<模块名>.kpm

5. 构建特定模块

需要先构建一次所有的模块

./build.sh
cmake --build build --target hello

Windows 11 + WSL2 配置

在 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 设备。

模块开发示例

KPM 模块源码要点

如果你要创建自己的内核模块,参考以下示例:

// 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);

About

内核模块开发

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages