内核中断
文章目录
- 内核中断
- 1、中断介绍
- 1.1 什么是中断
- 1.2 轮询与中断区别
- 1.3 中断与异常的区别
- 2、中断处理
- 2.1 进程上下文(Process Context)和中断上下文(Interrupt Context)
- 2.2 中断的上半部分(Top Halves)和下半部分(Bottom Halves)
- 2.2.1 上半部分(Top Halves)
- 2.2.2 下半部分(Bottom Halves)
- 3、中断(ISR)服务编程实现
- 3.1 硬件准备
- 3.2 与中断相关的API介绍
- 3.3 中断标志
- 3.4 驱动实现
在前面的文章中,详细介绍了在非中断方式下,如何通过按键输入控制LED的驱动实例。在实例中,设备操作函数(read)中,通过读取主动按键状态值,这种操作方式效率非常低下,并且占用CPU,不用于降低功耗。本文在前面文章的基础上,将介绍Linux内核的中断以及如何响应它们,并使用中断处理程序(ISR)的特殊函数。
1、中断介绍
1.1 什么是中断
中断是一种改变程序正常执行流程的事件,可以由硬件设备甚至 CPU 本身产生。 当中断发生时,当前的执行流程被挂起,中断处理程序运行。 中断处理程序运行后,将恢复先前的执行流程。
根据中断源,中断可以分为两类。 根据推迟或暂时禁用中断的能力,它们还可以分为另外类型:
- 同步:通过执行一条指令生成
- 异步:由外部事件生成
- 可屏蔽:
- 可以忽略
- 通过 INT 引脚发出信号
- 不可屏蔽:
- 不可忽略
- 通过 NMI 引脚发出信号