免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2709 | 回复: 2
打印 上一主题 下一主题

关于ARM架构下Linux中断的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-23 22:58 |只看该作者 |倒序浏览
大家好:

前一段时间看了一点Qualcomm MSM平台下中断处理的代码,发现有些基础知识方面的问题非常迷惑,希望各位不吝赐教,先谢谢了~

问题是:
(1). 在MSM平台下(ARM),是否支持中断嵌套?
(2). 如果支持,那么就需要捋清楚整个中断流程
    2.1 当IRQ中断来的时候,CPU会自动将CPSR的I位置位,从而禁止新的IRQ中断
    2.2 PC会自动设置到0xFFFF0018处
    2.3 随后,跳转到vector_irq处执行,此时,处理器处于IRQ模式,vector_irq的代码做了这些操作:修正返回地址(lr),依次将ro,lr,spsr压入栈中(此时的栈应该是IRQ模式下的栈),设置spsr为SVC模式,根据lr计算正确的跳转表项,最后通过更新PC来跳转到相应的跳转表项中(比如,来中断之前处于usr模式,那么就应该跳转到__irq_usr来执行)
    2.4 到了__irq_usr中,首先调用usr_entry,把一堆从r0-r15还有一些usr模式下的寄存器压入SVC模式下的栈,然后调用get_thread_info,根据sp找到thread_info,将preempt_count加1,防止内核抢占,再接下来,调用irq_handler来获取中断号,并触发调用asm_do_IRQ(它将调用注册中断时作为参数传进来的中断服务程序),最后,恢复tsk,给why赋值,掉用ret_to_user返回usr模式,结束

以上(2)中的步奏是基于MSM7627平台下,内核版本2.6.32的.问题关健在于整个流程不知道在何处重新将2.1中由CPU自动置位的I位给清掉的?如果没有清掉,显然是无法实现中断嵌套的,并且也不可能没有清掉,否则返回usr模式后岂不是无发接收中断了?可我找来找去,还是没有找到清掉I位的操作.

不知道哪位高人能够指点一二,在此谢谢各位~

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
2 [报告]
发表于 2011-01-24 00:06 |只看该作者
kernel\irq\handle.c handle_IRQ_event
local_irq_enable_in_hardirq();

论坛徽章:
0
3 [报告]
发表于 2011-02-11 09:17 |只看该作者
你要问的应该是中断嵌套问题吧?
linux不支持中断嵌套,你要清楚这点。支持中断嵌套比较麻烦,而且不确定性很多。
通常芯片,比如arm,内部都有一个中断挂起寄存器(intr pending register),处理器根据硬件的中断优先级选择优先级最高的intr去执行,不会丢失中断,这从某一方面说,也保证了不会有中断丢失。
至于如何实现中断嵌套,你可以去看看arm公司的datasheet方面的书,上面有很好的解释,看过一本类似的书,国内也有翻译,具体书名忘记了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP