Linux 驱动程序运行原理(简化版)
用户态 APP | |
内核态 驱动程序 | |
硬件层 设备/外围芯片 | |
看到上面的运行原理图,也许会产生一点疑问,APP是什么?驱动程序是什么?驱动/外围芯片时什么?它们之间存在一种什么样的关系?
APP是什么呢?在生活中不乏各种各样的手机APP,究其本质就是人机交流的程序。
驱动程序是什么呢?见字也许可以猜想到是可以驱动XX的一种程序。事实上,驱动程序就是驱动硬件,与硬件(设备/外围芯片)交流的程序。
总结一下:APP与驱动程序交流,而驱动驱动程序与设备/外围芯片交流,那么APP是否可以间接与设备/外围芯片交流呢?
答案是可以的! 具体细节,下一篇再详细写!
驱动设备主要分为字符设备(character device)、块设备(block device)和 网络设备(net device)
其中,最主要的是字符设备,写驱动的入口在于字符设备驱动。以下是驱动程序最基础的框架。
最基础的LInux驱动框架:
1 #include <linux/init.h> 2 3 #include <linux/module.h> 4 5 6 7 static int __init driver_module_init(void) //内核入口程序初始化 8 9 { 10 11 return 0; 12 13 } 14 15 static void __exit driver_module_exit(void) //内核卸载程序初始化 16 17 { 18 19 } 20 21 22 23 module_init(driver_module_init); //内核初始化接口 24 25 module_exit(driver_module_exit); //内核卸载接口 26 27 28 29 MODULE_LICENSE("GPL"); 30 31 MODULE_AUTHOR("stromeli<qq:1275763609>")//有兴趣于驱动编程的,可以加此QQ,互相探讨。 32 33 MODULE_DESCRIPTION("module driver");