Linux内核模块是扩展系统功能的核心工具,允许开发者在不重新编译内核的前提下动态添加功能。以下是开发入门指南:
开发流程概览 📌
模块创建
使用module_init()
和module_exit()
定义入口/出口函数
示例代码:int __init hello_init(void) { printk(KERN_INFO "Hello, world!\n"); } void __exit hello_exit(void) { printk(KERN_INFO "Goodbye, world!\n"); }
编译与加载
通过make
生成.ko
文件,使用insmod
加载模块
⚠️ 注意:需确保内核头文件与当前运行内核版本一致调试技巧
- 使用
dmesg
查看内核日志 - 通过
lsmod
检查已加载模块 - 添加
printk
调试输出
- 使用
模块加载与卸载 📦
- 加载模块:
sudo insmod hello.ko
- 查看状态:
sudo dmesg | tail
- 卸载模块:
sudo rmmod hello
- 验证卸载:
lsmod
应显示模块已消失
编程实践建议 🛠️
- 掌握
MODULE_LICENSE
宏的使用(GPL、Proprietary等) - 熟悉
MODULE_AUTHOR
和MODULE_DESCRIPTION
字段 - 学习模块参数传递:
module_param
宏应用 - 避免使用
#include <linux/module.h>
以外的头文件
🔗 深入学习可参考:Linux内核模块开发实战