加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – ARM中的嵌套中断处理

发布时间:2020-12-13 23:25:26 所属栏目:Linux 来源:网络整理
导读:下面是Cortex A Prog指南中提到的流程,我对文本有几个问题. 因此,在引发IRQ异常并以前面描??述的方式将控制转移到中断处理程序之后,重入中断处理程序必须执行以下步骤. ?中断处理程序保存被中断程序的上下文(也就是说,它会将任何将被处理程序破坏的寄存器推
下面是Cortex A Prog指南中提到的流程,我对文本有几个问题.

因此,在引发IRQ异常并以前面描??述的方式将控制转移到中断处理程序之后,重入中断处理程序必须执行以下步骤.

?中断处理程序保存被中断程序的上下文(也就是说,它会将任何将被处理程序破坏的寄存器推送到备用内核模式堆栈,包括返回地址和SPSR_IRQ).

Q> What is the alternative kernel mode stack here ?

?它确定需要处理哪个中断源并清除外部硬件中的源(防止它立即触发另一个中断).

?中断处理程序将处理器更改为其他内核模式,将CPSR I位置1(中断仍处于禁用状态).

Q> From IRQ to SVC mode with CPSR.I =1 . Right ?

?中断处理程序将异常返回地址保存在堆栈上(新模式的堆栈,位于内核内存中)并重新启用中断.

Q> Are there 2 stacks here ?

?它为原始中断调用适当的C处理程序(中断仍被禁用).

?完成后,中断处理程序禁用IRQ并从堆栈中弹出异常返回地址.

?它直接从备用内核模式堆栈恢复中断程序的上下文.这包括恢复PC和切换回先前执行模式的CPSR.

Q> How is the nesting done here ? I am bit confused here...

解决方法

1)真的,由你决定.要求是它是一个不能异步调用的.因此,您可以使用与用户模式共享的系统模式堆栈 – 具有一些有趣的含义.或者您可以使用Supervisor模式堆栈,只要您在执行SVC指令之前始终正确存储所有上下文.

2)是的.

3)是的,无论在(1)中选择哪种模式,都将上下文存储在堆栈中.

4)在备用模式下执行时,重新启用中断(如文本所示).此时,处理器现在将对发送到内核的新中断做出反应 – 通常是中断控制器中配置的更高优先级.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读