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

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


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

每一设备都有相关的驱动程序,如果设备使用中断的方式与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!!!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值