Linux2.6.32.2 中断注册与注销处理函数流程

一、注册中断处理函数

使用request_threaded_irq( )函数来处理,函数声明如下:

int request_threaded_irq(unsigned int irq, irq_handler_t handler,
    irq_handler_t thread_fn, unsigned long irqflags,
    const char *devname, void *dev_id)

此函数做了如下的工作:

1、分配了一个irqaction结构空间

action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);

2、初始化该结构的成员

action->handler = handler;
 action->thread_fn = thread_fn;
 action->flags = irqflags;
 action->name = devname;
 action->dev_id = dev_id;

3、设置中断

retval = __setup_irq(irq, desc, action);

该函数完成以下几项内容

  (1)根据中断号找到irq_desc数据项,在链表内加入action结构。

  (2)设置irq_desc[irq]结构中还没有设置的指针,让他们指向一些默认函数

  irq_chip_set_defaults(desc->chip);

  (3)设置中断触发方式

  ret = __irq_set_trigger(desc, irq, new->flags & IRQF_TRIGGER_MASK);

  (4)启动中断
    __enable_irq(desc, irq, false);


 

二、注销中断处理函数

函数声明如下:

void free_irq(unsigned int irq, void *dev_id)

使用中断号irq定位action链表,再使用dev_id在action链表中找到要卸载的表项。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值