我是靠谱客的博主 贪玩老师,最近开发中收集的这篇文章主要介绍Linux驱动开发之八-----按键驱动(异步通知机制),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在Linux下,异步通知类似于信号机制,内核和应用程序之间采用通知方法来告知是否发生对应的事件,并进一步采取相应的动作,当产生按键动作时,发生中断,由驱动程序使用kill_fasync函数告知应用程序,而应用程序需要向内核提供PID,然后就可以工作了。

驱动fasync接口实现:

int buttons_fasync(int fd, struct file *filp, int on)
{
return fasync_helper(fd, filp, on, &but_fasync);
}
在中断处理程序中调用kill_fasync函数:

//中断处理程序,记录按键按下的次数,并置标志位为1,唤醒等待队列上等待的进程
static irqreturn_t buttons_interrupt(int irq,void *dev_id)
{
struct button_irq_desc *temp = (struct button_irq_desc *)dev_id;
key_val = (unsigned char)(temp->number+1);
ev_press = 1;//表示中断发生了
wake_up_interruptible(&buttons_waitq);
//当有按键被按下时驱动程序通知应用程序
kill_fasync(&but_fasync,SIGIO, POLL_IN);
return IRQ_RETVAL(IRQ_HANDLED);
}
应用程序告知内核其PID并调用fasync函数

	fcntl(fd,F_SETOWN,getpid());//把当前进程的ID号告诉驱动程序
Oflag = fcntl(fd,F_GETFL);
fcntl(fd,F_SETFL,Oflag | FASYNC);//设置异步通知标志,调用fasync
编译并下载运行截图如下:



最后

以上就是贪玩老师为你收集整理的Linux驱动开发之八-----按键驱动(异步通知机制)的全部内容,希望文章能够帮你解决Linux驱动开发之八-----按键驱动(异步通知机制)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部