败而不馁胜不娇,傲骨凛凛硬似刀。
富贵不能淫正气,贫贱不能移志高。
威武不能屈气节,八面寒风不折腰。
人中白鹤百世敬,竹节清清入云宵。
文章目录
一、异步通知深入
在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据,Linux 提供了异步通知这个机制来完成此功能。
1.1、异步通知简介
首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。比如 GPIO 按键中断,通过按键去开关蜂鸣器,采用中断以后处理器就不需要时刻的去查看按键有没有被按下,因为按键按下以后会自动触发中断。同样的, Linux 应用程序可以通过阻塞或者非阻塞这两种方式来访问驱动设备,通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以使用,非阻塞方式的话会通过 poll 函数来不断的轮询,查看驱动设备文件是否可以使用。这两种方式都需要应用程序主动的去查询设备的使用情况,如果能提供一种类似中断的机制,当驱动程序可以访问的时候主动告诉应用程序那就最好了。
“信号”为此应运而生,信号类似于我们硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于
本文深入探讨Linux驱动开发中的异步通知机制,介绍了如何利用信号实现驱动主动通知应用程序。主要内容包括异步通知简介、驱动中的信号处理函数(如fasync_struct、fasync函数和kill_fasync函数)以及应用程序对异步通知的处理步骤。同时,提供了驱动程序和应用程序的编写示例。
订阅专栏 解锁全文
947

被折叠的 条评论
为什么被折叠?



