Linux驱动开发入门基础
![](https://img2022.cnblogs.com/blog/137928/202205/137928-20220508135730113-631880221.png)
Linux驱动开发
简单的helloworld内核模块程序
源码分析
1 #include <linux/init.h> //位于内核源码include下,主要包含了内核模块的加载、卸载函数的声明,还有一些宏定义。涉及到内核模块编程需要
2 #include <linux/module.h> //一些宏定义,MODULE_LICENSE 这个是指定该内核模块的许可证,必须要有。其它看情况
3
4 //默认不输出调试信息 权限有限制
5 ***********内核模块参数**************
6 bool debug_on = 0; //布尔类型的模块参数,控制调试信息的输出,正常运行不需要,为0
7 module_param(debug_on, bool, S_IRWXU); //第三个是权限,用户拥有IRW三个权限。该宏定义在/linux/moduleparam.h
8
9
10 ******* 内核模块加载/卸载函数************
11 static int __init hello_init(void) //如果和内核源码中的函数重复则会编译失败报错,所以要static
12 {
13 if (debug)
14 printk("[ DEBUG ] debug info output\n"); //内核模块运行时无法调用C库的printf
15 printk("Hello World Module Init\n");
16 return 0; //返回值为0,初始化成功,在/sys/module 下新建一个以模块名为名的目录,
17 }
18 module_init(hello_init); //该宏告诉内核注册一个模块加载函数 hello_init,来进行模块初始化,具体见下
19
20
21 static void __exit hello_exit(void)
22 {
23 printk("Hello World Module Exit\n");
24 }
25 module_exit(hello_exit); //该宏告诉内核注册该模块的卸载函数。
26
27 *********内核模块许可证及其它信息********
28 MODULE_LICENSE("GPL"); //必须声明该模块使用遵循的许可证,这里我们设置为 GPL 协议。
29 MODULE_AUTHOR("embedfire");
30 MODULE_DESCRIPTION("hello world module");
31 MODULE_ALIAS("test_module"); //用于起别名
————————————————
版权声明:本文为CSDN博主「致丶简」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40662725/article/details/105884252