第6章中断和中断处理程序
6.1中断(使硬件与CPU通信)
不同设备中断不一样,有各自唯一标识
异常(不等于中断)
常称为同步中断(因与系统时钟有关)
6.2中断处理程序
(硬件:HI,我有东西要你帮我处理呢;CPU:HI,我收到了,你回去继续值班吧)
1.上半部(tophalf):紧迫,有限的工作
2.下半部(bottomhalf):可延时性的工作
6.3注册中断处理程序
(每一设备有对应驱程,设备使用中断,驱程则注册一个中断处理程序)
注册并激活:
在一个驱动程序中请求一个中断线,并通过request_irq()安装中断处理程序
释放:
卸载驱动程序,注销相应中断处理程序,并通过free_irq()释放中断线
6.4编写中断处理程序
典型声明例子:
staticirqreturn_t intr_handler(int irq, void *dev_id, structpt_regs, *regs )
Linux中断处理程序无需重入(也就是说一个中断线正在执行,另外的中断不能干扰)
1.共享中断处理程序
与非共享中断处理程区别(共享中断处理程序必须满足):
1flahs必须设置为SA_SHIRQ
2对每个注册的中断dev_id参数唯一
3中断处理程序必须区分设备是否产生了真中断
6.5中断上下文(interruptcontext)
注意啦,这里是中断上下文,而不是进程上下文,不记得的看回第一章,上面有说什么时候在进程上下文与中断上下文的
1.进程上下文(processcontext):一种内核所处的操作模式(可抢占,可sleep,可syscalls),此时内核代表进程执行
2.中断上下文(interruptcontext):
有严格的时间限制(打断了其他代码)
中断处理程序的栈是一个配置选项,共享中断进程的内核栈2页
6.6中断处理机制的实现(注:原书有详细介绍)

6.7中断控制(提供一种接口操作中断状态)
中断控制原因:提供同步
1禁止&激活中断:
local_irq_disable()| local_irq_able()
load_irq_save() | load_irq_restore()
保存中断状态→ 禁止中断 →...→ 恢复中断状态→ 激活中断 (嘿(→...→ )这个表情屌)
2禁止指定中断线:
disable_irq() | enable_irq()
synchronize_irq() | disable_irq_nosyne()
3中断系统状态:
检查内核当前上下文接口
in_interrupt()
in_irq()
中断小结:
1.对硬件管理的驱动程序注册中断处理程序(为响应并处理来自硬件的中断)
2.中断过程工作:
1.应答并设置硬件
2.设备拷贝数据到内存——内存拷贝数据到设备
3.处理硬件请求
4.发送新硬件请求
3.内核提供接口:
1.注册/注销中断处理程序
2.禁止中断
3.屏蔽中断线
4.检测中断系统状态
4.内核把处理中断分为——上半部&下半部
(不要混淆了,中断处理程序通常指上半部,中断处理与处理中断不一样哦)
本文深入探讨了中断处理的概念,包括同步中断与异常的区别,中断处理程序的分类及其在设备驱动程序中的注册与激活机制。同时介绍了中断上下文的概念,内核如何管理中断过程,以及如何实现中断控制。最后,总结了中断处理程序的编写规则,以及内核将处理中断分为上半部和下半部的原因。
1166

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



