驱动基础-中断系列

中断系列:
1.休眠与唤醒
在这里插入图片描述
read无按键则里边休眠wait_eventxx,如果此时有按键按下,唤醒休眠队列 wake_up,处理按键中断;
驱动层步骤:()通过参考书和源码知道的下边三个步骤

  1. 初始化队列;
  2. wait_event队列;
  3. wake_up 队列
    过程:应用层read();–驱动层dri_read–>队列为空,则休眠—》按键了—》调用中断处理函数–》队列加值–》唤醒队列–》read里被唤醒–》读出来值–处理;

2.poll机制

在这里插入图片描述
3.异步通知(发信号):
应用程序不休眠,做自己的事,驱动有数据的时候发信号给应用程序,然后应用程序去做处理的机制
同步机制:买麻辣香锅,点好了,看着店员做好端给你。
异步:买麻辣香锅,点好了,去做自己的事,做好了,店员通知你做好了;
底层用 kill_fasync()发信号

运行过程:应用程序运行,注册信号处理函数,发送进程pid给驱动,开始做自己的事情,此时硬件按键按下,驱动程序调用中断,中断发信号,给应用程序,应用程序捕捉到信号,开始读驱动,驱动调用读,返回读出的数据,界面打印出度的数据;
在这里插入图片描述
4.阻塞与非阻塞
上层打开字符设备时,可选block or no-block,驱动层读取 file->f_flags 来确定是阻塞还是非阻塞,非阻塞则return;
5.定时器
超时时间+处理函数
驱动层,注册定时器,添加超时时间,硬件改变,触发中断irq,修改定时器超时时间,比如 按下按键 消抖=修改的超时时间,时间一过,检测到按键;
6.中断下半部
不能处理耗时任务
内核先处理硬件中断,然后将相应软件中断处理加如内核tasklet队列,硬件中断处理完毕,触发软件中断,处理软件中断; 在这里插入图片描述
7.工作队列
用内核线程处理耗时工作,如果处理的任务非常耗时,建议自己创建内核线程;
在这里插入图片描述
实现机制
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值