什么是Linux内核模块?
Linux内核模块是能够被动态加载到内核中的代码片段,用于扩展系统功能。通过模块,开发者可以在不重新编译整个内核的情况下添加新特性,如硬件驱动、系统调用等。
开发环境准备 🛠
- 安装Linux系统(推荐Ubuntu 20.04或CentOS 7)
- 配置内核头文件:
sudo apt install linux-headers-$(uname -r)
- 安装编译工具链:
sudo apt install build-essential
- 检查内核版本:
uname -a
第一个内核模块示例 📄
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
void hello_module(void) {
printk(KERN_INFO "Hello, Linux kernel module!\n");
}
void goodbye_module(void) {
printk(KERN_INFO "Goodbye, Linux kernel module!\n");
}
module_init(hello_module); // 模块加载时调用
module_exit(goodbye_module); // 模块卸载时调用
模块加载与卸载 ⚙
- 编译模块:
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
- 安装模块:
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
- 加载模块:
sudo insmod hello.ko
- 查看日志:
dmesg | tail
- 卸载模块:
sudo rmmod hello
调试技巧 🔍
- 使用
printk
输出调试信息 - 通过
/var/log/kern.log
查看日志 - 添加
MODULE_INFO
宏记录模块信息
进阶学习推荐 📚
提示:开发内核模块需要谨慎操作,建议在虚拟机或测试环境中进行实验。