举例说明一个内核驱动模块程序的构造过程;特别地,加载该模块时,输出“Hello driver-module!”,卸载该模块时,输出“Goodbye driver-module!”
时间: 2024-02-24 18:56:37 浏览: 66
linux内核驱动模块模板之hello
首先,编写一个名为 `hello-module.c` 的内核驱动程序代码,内容如下:
```c
#include <linux/init.h>
#include <linux/module.h>
static int __init hello_init(void)
{
printk(KERN_ALERT "Hello driver-module!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "Goodbye driver-module!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple hello world driver module");
MODULE_VERSION("0.01");
```
代码解析:
首先,我们引入了两个头文件 `linux/init.h` 和 `linux/module.h`,用于内核初始化和模块编程。
接着,我们定义了两个函数 `hello_init` 和 `hello_exit`,分别用于加载和卸载模块时的操作。这两个函数都是 `static` 类型,意味着它们只在本文件内可见。
在 `hello_init` 函数中,我们使用 `printk` 函数输出一条调试信息,提示加载成功。
在 `hello_exit` 函数中,我们同样使用 `printk` 函数输出一条调试信息,提示卸载成功。
接着,我们使用 `module_init` 和 `module_exit` 宏分别注册加载和卸载函数,以告诉内核如何加载和卸载这个模块。
最后,我们使用多个 `MODULE_` 宏定义模块的各种信息,如许可证、作者、描述和版本号等。
然后,我们编译这个模块,生成一个名为 `hello-module.ko` 的内核对象文件。
最后,我们使用 `insmod` 命令加载这个模块,即可看到在终端输出 "Hello driver-module!" 的调试信息;使用 `rmmod` 命令卸载这个模块,即可看到在终端输出 "Goodbye driver-module!" 的调试信息。
阅读全文