文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux硬中断和软中断处理流程

linux硬中断和软中断处理流程

时间:2010-04-22  来源:returnx

1、entry_armv.S有系统中断向量表 __vectors_start:
swi SYS_ERROR0
b vector_und + stubs_offset
ldr pc, .LCvswi + stubs_offset
b vector_pabt + stubs_offset
b vector_dabt + stubs_offset
b vector_addrexcptn + stubs_offset
b vector_irq + stubs_offset
b vector_fiq + stubs_offset
当有中断到来时会跳到 b vector_irq + stubs_offset处执行,这里是由一个通用的宏来处理,根据发生中断时是在用户态还是内核态分别由__irq_usr或__irq_svc来处理,它们最后都会调用asm_do_IRQ,参数用中断号(通过entry-maro.s中的get_irqnr_and_base获取)、寄存器。注意这时中断可是关闭的。 2、asm_do_IRQ在arch/arm/kernel/irq.c中:      1)设置当前进程的处理中断标志;      2)按中断号进入相应的中断处理程序,即调用中断描符的成员handle;      3)检查是否有挂起的中断,如果有则处理;      4)去除当前中断处理标志。      5)如果当前不在中断中,且有软中断要处理则处理软中断。 3、上一步说按中断号进入相应的中断处理程序,下面说个个中断处理程序是如何注册的。       1)在main.c中start_kernel->init_IRQ中会首先把中断描述表初始化为bad_irq_desc(就是没意义),再调用平台相关的init_arch_irq(),这是在setup.c里setup_arch赋值的,           对应的是mach_smdk2410.c里的smdk2410_init_irq。       2)smdk2410_init_irq首先清中断;然后为每一个中断描符的成员chip设置s3c_irq_level_chip或s3c_irq_chip,这个主要用来设置中断寄存器,用来屏蔽中断等;再为每一个中断描符的成员handle设置          do_level_IRQ或do_edge_IRQ, 这两个的区别是一个来中断时关不关中断;中断描述符表里的action,是个各驱动注册的中断处理程序, do_level_IRQ或do_edge_IRQ这两个函数会调用所有action.       3)这里也有对子中断的处理。
4、这个中断是什么时候持起的暂时还不知道。
5、软中断处理:
相关阅读 更多 +
排行榜 更多 +
哥布林弹球b服手游下载

哥布林弹球b服手游下载

休闲益智 下载
小马样式盒游戏下载

小马样式盒游戏下载

休闲益智 下载
异变小镇中文版下载安装

异变小镇中文版下载安装

冒险解谜 下载