2. 请简述内核模块程序的结构,并根据该结构编写一个内核模块:要求加载模块时内核日志中显示每位同学的学号,卸载时显示“bye-embedded”
时间: 2024-02-23 18:58:54 浏览: 57
内核模块程序的结构一般包括以下几个部分:
1. 头文件:包括必要的头文件,如<linux/init.h>, <linux/module.h>, <linux/kernel.h>等。
2. 模块入口函数:模块入口函数是模块程序的主函数,通过它实现模块的初始化和卸载。模块入口函数有两个,一个是模块初始化函数init_module(),一个是卸载函数cleanup_module()。
3. 模块参数:有时候需要在加载模块时传递一些参数,这时可以通过模块参数来实现。模块参数可以使用module_param()宏定义。
4. 模块描述信息:模块描述信息包括模块名、作者、版本号、描述等,可以使用MODULE_AUTHOR()、MODULE_DESCRIPTION()等宏定义。
根据以上结构,可以编写如下的内核模块程序:
```
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("your name");
MODULE_DESCRIPTION("a simple kernel module");
static char *student_id = "your student id";
module_param(student_id, charp, S_IRUGO);
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);
```
上述代码中,模块入口函数为hello_init()和hello_exit(),模块参数为student_id,模块描述信息包括作者和模块描述。在加载模块时,内核日志中会显示每位同学的学号,而在卸载时则会显示“bye-embedded”。