Linux驱动开发入门基础

 

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

 

posted @ 2022-05-08 13:59  jiftle  阅读(225)  评论(0编辑  收藏  举报