# netlink_ipc **Repository Path**: mudash/netlink_ipc ## Basic Information - **Project Name**: netlink_ipc - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-01 - **Last Updated**: 2026-02-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Netlink IPC 实现 本项目实现了一个基于Linux Netlink的内核态与用户态通信框架,允许内核态代码调用用户态注册的函数。 ## 项目结构 ``` netlink_ipc/ ├── include/ # 公共头文件 │ └── netlink_ipc.h # 定义通信协议和数据结构 ├── kernel/ # 内核模块代码 │ └── netlink_ipc_module.c # 内核模块实现 ├── user/ # 用户态程序代码 │ ├── netlink_ipc_user.c # 用户态库实现 │ └── test_netlink_ipc.c # 测试程序 ├── build.sh # 构建脚本 ├── test.sh # 测试脚本 └── README.md # 项目说明文件 ``` ## 功能特性 1. **用户态函数注册**:用户态程序可以注册多个函数到内核模块 2. **函数调用支持**:内核模块可以调用已注册的用户态函数 3. **多参数支持**:支持多种数据类型的参数传递(整数、长整数、字符串、字符、浮点数、双精度浮点数) 4. **函数注销**:用户态程序可以注销已注册的函数 5. **完整测试**:包含内核态和用户态的测试功能 ## 使用方法 ### 构建项目 ```bash # 构建整个项目(内核模块和用户态程序) ./build.sh # 仅构建内核模块 ./build.sh --kernel # 仅构建用户态程序 ./build.sh --user # 清理构建文件 ./build.sh --clean ``` ### 测试项目 测试脚本需要以root权限运行: ```bash # 执行完整测试(加载模块、运行测试程序、检查结果、卸载模块) sudo ./test.sh # 仅加载内核模块 sudo ./test.sh --load # 仅卸载内核模块 sudo ./test.sh --unload # 仅运行用户态测试程序 sudo ./test.sh --run # 检查内核模块状态 sudo ./test.sh --check ``` ### 开发指南 #### 1. 添加新的用户态函数 在用户态程序中,你可以定义自己的函数并注册到内核。函数必须遵循以下格式: ```c __s64 my_function(struct func_param *params, int param_count) { // 函数实现 // 处理参数并返回结果 return result; } ``` 然后使用`register_user_func`函数注册你的函数: ```c register_user_func(FUNC_ID, "my_function", my_function); ``` #### 2. 内核态调用用户态函数 在内核代码中,你可以使用`kernel_call_user_func`函数调用已注册的用户态函数: ```c struct func_param params[2]; __s64 result; // 设置参数 params[0].type = PARAM_TYPE_INT; params[0].val.i_val = 10; params[1].type = PARAM_TYPE_INT; params[1].val.i_val = 20; // 调用用户态函数 kernel_call_user_func(FUNC_ID, params, 2, &result); ``` ## 注意事项 1. **权限要求**:加载/卸载内核模块需要root权限 2. **netlink协议号**:本项目使用的netlink协议号为27,请确保不与其他应用冲突 3. **错误处理**:代码包含基本的错误处理,但在实际应用中可能需要进一步完善 4. **内核兼容性**:内核模块可能需要根据不同的Linux内核版本进行调整 ## 故障排除 1. **内核模块加载失败**: - 检查内核版本是否兼容 - 查看`dmesg`输出以获取详细错误信息 2. **函数注册失败**: - 确保内核模块已正确加载 - 检查函数ID是否已被使用 3. **通信问题**: - 检查netlink协议号是否正确 - 查看系统日志以获取更多信息 ## 许可证 本项目基于GPL许可证。