Linux中断处理过程浅析.doc

Linux中断处理过程浅析.doc

ID:28099897

大小:125.50 KB

页数:10页

时间:2018-12-08

Linux中断处理过程浅析.doc_第1页
Linux中断处理过程浅析.doc_第2页
Linux中断处理过程浅析.doc_第3页
Linux中断处理过程浅析.doc_第4页
Linux中断处理过程浅析.doc_第5页
资源描述:

《Linux中断处理过程浅析.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、linux中断响应和处理过程:首先中断属于异常的一种。异常,就是可以打断CPU正常运行流程的一些事情,比如说外部中断,未定义的指定,试图修改只读数据,执行SWI指定(software interrupt instructin,软件中断指令,比如说上层调用sys_read,sys_write就会产生swi)等。内核启动时在start_kernel函数(init/main.c)中调用trap_init ,  init_IRQ两个函数来设置异常的处理函数。trap_init函数(arch/arm/kernel/traps.c)void_i

2、nit trap_init(void){......memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);memcpy((void *)vectors + 0x200, __stubs_start, __stubs_end - __stubs_start);.......}上面两条定义的是异常向量的存放地方,即:__stubs_start~~~~~ __stubs_end之间就是异常向量.接下来 我们看异常向量之间的定义:(arch/arm

3、/kernel/entry-armv.s).equ stubs_offset, __vectors_start + 0x200 - __stubs_start    .globl __vectors_start__vectors_start: ARM( swi SYS_ERROR0 )      //复位时.CPU交执行这条指令 THUMB( svc #0 ) THUMB( nop )W(b) vector_und + stubs_offset   //未定义异常时,CPU将执行这条跳转指令W(ldr) pc, .LCvswi + 

4、stubs_offset   //swi异常W(b) vector_pabt + stubs_offset   //指令预取止W(b) vector_dabt + stubs_offset   //数据访问中止W(b) vector_addrexcptn + stubs_offset  //没有用到W(b) vector_irq + stubs_offset         //irq中断W(b) vector_fiq + stubs_offset         //fig中断 (快速中断).globl __vectors_end

5、__vectors_end:各种异常的处理函数可以分为五类,分别分布在下面不同的文件中:1、arch/arm/kernel/traps.c中   处理未定义指令异常,总入口函数为do_undefinstr2、arch/arm/mm/fault.c   与内存访问相关的异常,总入口函数为do_DataAbort, do_PretftchAbort3. arch/arm/mm/irq.c   中断处理函数在这个文件中定义,总入口函数为asm_do_IRQ4. arch/arm/kernel/call.s  swi异常处理  比如说:sy

6、s_read,  sys_open等.5. 没有使用的异常除了IRQ中断外(FIG中断linux一般不使用),所有的异常内核都定义了细致而完备的处理函数.  所以我们这里关心的也只是上面红色部分,即:IRQ中断.Init_IRQ函数(arch/arm/kernel/irq.c),被用来初使化中断的处理框架,设置各种中断的默认处理函数.Linux内核将所有中断统一编号,使用irq_desc结构来描述中断:每个数组项对应一个中断(也可能是一组中断,它们使用共同的中断号),里面记录了中断的名称,中断状态,中断标记,并提供硬件访问函数(清除

7、,屏蔽,使能中断),提供了这个中断的处理函数的入口,通过它可以调用用户注册的中断处理函数include/linux/irq.h{.........irq_flow_handler_t handle_irq;   //当前的中断处理函数入口struct irq_chip *chip;       //底层的硬件访问..........struct irqaction *action; //用户提供的中断处理函数链表unsigned int status; //IRQ状态...........const char *name;     

8、//中断名称} ____cacheline_internodealigned_in_smp;Handle_irq是这个或者这组中断的处理函数入口.当中断发生时总中断入口函数asm_do_IRQ将根据中断号调用相应irq_desc数组中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。