Linux 中断子系统(八):中断处理流程

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1、上层中断处理

系统初始化时,已经建立起 硬件中断号 和 软件中断号的 映射表

中断注册时,我们需要先从设备树中获取硬件中断号,然后调用 API 将硬件中断号转换为软件中断号,根据软件终端号 irq 找到对应的 irq_desc,并将中断处理函数添加到 irq_desc 中(也就是 irqaction 结构体中)。

当中断发生,根据硬件中断号通过 irq_domian 翻译成软件中断号 irq number,找到对应的 irq_desc,并最终调用到中断处理函数,处理完成恢复现场。

2、ARM 底层中断处理

1、保存中断发生时 CPSR 寄存器的内容到 SPSR_irq 寄存器中

2、修改 CPSR 寄存器,让 CPU 进入处理器模式中的 IRQ 模式,即 CPSR 寄存器中的 M 域设置为 IRQ Mode

3、硬件自动关闭中断 IRQ 或 FIQ,即 CPSR 中的 IRQ 位或 FIQ 位置 1

4、保存返回地址到 LR_irq 寄存器中

5、硬件自动跳转到中断向量表的 IRQ 向量中,后续动作都是软件行为 —–>

中断返回时,软件需要实现以下两个操作

1、从 SPSR_irq 寄存器中恢复数据到 CPSR 中

2、从 LR_irq 中回复内容到 PC 中,从而返回到中断点的下一个指令处执行。

CPSR 寄存器

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux

“Linux 中断子系统(八):中断处理流程” 的相关文章