<2012 11 6 > linux设备驱动程序开发初探(4) linux的中断体系_按键中断驱动程序编写

2012 11 4

linux的中断体系

linux的中断体系是“异常体系”的一部分,由于大多数时候用户(驱动程序和应用程序开发者)只需要使用中断体系来进行程序设计,因此这里专注于介绍linux中断体系的结构。

一、异常===>中断
①、内核初始化时,trap_int函数构造了类似裸机中断向量表的一个异常表,并在内存中重定位。
②、在中断发生后,一个用宏实现的vector_irq跳转保存中断发生时的现场,在用户模式和管理模式分别跳转到不同的处理函数。
③、C函数asm_do_irq被执行,是linux中断处理的主要框架。

二、linux中断框架(desc <-- description )
C函数asm_do_irq实现了类似裸机编程中的一般中断处理流程。
全局结构数组irq_desc描述中断的数据结构,每个数组项(数组下标对应中断号)对应了一个中断(或者一组中断),并提供了中断的底层函数,提供了这个中断的处理函数入口。通过这个结构数组能够了解中断处理结构,这个数据在内核源码include/linux/irq.h中定义。在asm_do_irq函数中,定义了内核处理中断的流程。

用户用request_irq函数注册中断处理函数。这个函数的作用:
# 分配一个irq_action
# 把这个结构放入irq_desc[irq]中的action链表中
# 设置中断引脚
# 使能中断

注销函数free_irq:
# 删除链表中的项
# 禁止中断

 


。。。

 


============================================

你可能感兴趣的:(linux)