异步通知
- 1.使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。
- 2.Linux 提供了异步通知这个机制来驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据.
- 3.“信号”为此应运而生,算是在软件层次上对中断的一种模拟.
- 4.驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于应用程序收到了驱动发送过来了的一个中断,然后应用程序去响应这个中断,在整个处理过程中应用程序并没有去查询驱动设备是否可以访问,一切都是由驱动设备自己告诉给应用程序的。
- 5.异步通知的核心就是信号,arch/xtensa/include/uapi/asm/signal.h 文件中定义了 Linux 所支持的所有信号。
- 6.除了 SIGKILL(9)和 SIGSTOP(19)这两个信号不能被忽略外,其他的信号都可以忽略。
驱动中的信号处理
- 1.fasync_struct 结构体
- 2.如果要使用异步通知,需要在设备驱动中实现 file_operations 操作集中的 fasync 函数.