应用程序和驱动的交互原理
驱动的本质:获取外设或者传感器数据,或者控制外设(比如开关)。数据提交给应用程序。
Linux驱动编写既要编写一个驱动,又要编写一个简单的测试应用程序,app。
Linux的存储分为用户空间和内核空间。
Linux 操作系统的内核和驱动程序运行在内核空间,应用程序运行在用户空间。(为了安全所以分为两个空间)
应用程序想要访问 内核资源,可以使用:系统调用,异常(中断)和陷入。 系统调用处于内核空间,应用程序无法直接访问,因此需要"陷入"到内核,方法就是软中断,陷入内核以后还有指定系统调用号。
字符驱动设备开发流程
在 Linux 里面一切皆是文件,驱动设备表现就是一个 /dev/ 下的文件,比如、dev/led。应用程序调用 opne 函数打开设备,比如 led ,应用程序通过 write 函数向 /dev/led 写数据,比如写 1 表示打开,写 0 表示关闭。如果关闭设备那么就是close 函数。
编写驱动的时候也需要编写驱动对应的 open ,close ,write 函数。字符设备驱动 fileoptions_struct.
1、驱动最终都是被应用调用的,在写驱动的时候要考虑应用开发的便捷性。
2、驱动是分驱动框架的,要按照驱动框架来编写,对于字符设备驱动来说,重点编写应用程序对应的 opne、close、read、wirte 等函数。