2. 请简述内核模块程序的结构,并根据该结构编写一个内核模块:要求加载模块时内核日志中显示每位同学的学号,卸载时显示“bye-embedded”
时间: 2024-02-01 07:13:08 浏览: 77
内核模块程序的结构一般包括以下几个部分:
1. 头文件引用:包括必须的内核头文件和自定义头文件,如`<linux/init.h>`、`<linux/module.h>`等。
2. 模块许可声明:使用`MODULE_LICENSE()`宏来声明模块的许可证,如“GPL”或“Proprietary”。
3. 模块初始化函数:使用`module_init()`宏来声明模块初始化函数,该函数在模块加载时被调用。
4. 模块退出函数:使用`module_exit()`宏来声明模块退出函数,该函数在模块卸载时被调用。
5. 自定义函数:可以编写自定义函数来实现模块的功能。
下面是一个简单的内核模块示例,该模块在加载时会在内核日志中显示每位同学的学号,卸载时显示“bye-embedded”:
```
#include <linux/init.h>
#include <linux/module.h>
#define STUDENT_ID "1234567890" // 学号
static int __init hello_init(void)
{
printk(KERN_INFO "Hello, %s!\n", STUDENT_ID);
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_INFO "bye-embedded\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
```
编写完成后,需使用`make`命令生成内核模块文件。加载模块使用`insmod`命令,卸载模块使用`rmmod`命令。在内核日志中可以通过`dmesg`命令查看输出信息。
阅读全文