每日阅读11之内核设计与实现——注册中断处理程序

来源:互联网 发布:游族网络怎么样 编辑:程序博客网 时间:2024/05/19 23:15

好久没有写博客了,已经有点迷失自我,忘了自己最重要的事情,罪过罪过。。。


中断处理程序是管理硬件的驱动程序的组成部分。

每一设备都有相关的驱动程序,如果设备使用中断的方式与CPU通信,那么驱动程序就会注册一个中断处理程序.(1个?)

驱动程序通过函数request_irq()注册一个中断处理程序,并激活相应的中断线(?什么东东,从下文看来像是多个中断处理程序共用的一个中断号)。。。定义在<linux/interupt.h>

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
   const char *name, void *dev)

其中第一个参数irq为要分配的中断号,对于某些设备,如传统PC上的系统时钟或键盘等设备是提前确定的。。而对于其它设备要么事动态探测获取,要么是编程动态确定。。

第二个参数handler是一个函数指针,typedef irqreturn_t (*irq_handler_t)(int, void *);接受二个参数,int和void *,并返回irqreturn_t类型参数。

第三个参数可以为0,也可以是一些标志的位掩码。

IRQF_DISABLED禁止所有其它中断,用于希望快速执行的轻量级中断。。。

IRQF_SAMPLE_RANDOM如果设置了这个标志,说明这个中断的中断间隔时间不是固定的,也就是说是个随机数,可为内核熵池做贡献,成为熵源

IRQF_SHARED表示可以在多个中断服务程序中共享中断线。。

第四个参数是描述中断设备的ASCII文本

第五个参数用于区别共享中断线的众多设备驱动程序的具体的那个。。作为一个标志。。

如后面的注销中断处理程序的函数原型是,extern void free_irq(unsigned int, void *dev);


request_irq函数可能会睡眠,因此不允许在中断上下文或任何不允许阻塞的代码中使用。。


这一块,OVER!!!