Linux设备驱动程序学习笔记13:中断的注册流程

本文详细介绍了Linux设备驱动程序中中断处理函数的角色,它在中断上下文中运行,不能导致阻塞。通过request_irq函数注册中断处理函数,参数包括中断号、处理函数和设备标识。中断处理的属性如IRQF_DISABLED、IRQF_SHARED等控制中断行为。request_irq初始化struct irqaction,并通过irq_desc数组将中断处理信息与中断关联,完成注册流程。

在中断的调用流程中讲到Linux中对中断的处理最终会调用到在驱动程序中注册的中断处理函数。中断处理函数(interrupt handle /  interruptservice routine)是设备驱动程序的一部分,内核通过它来回应特定的中断。中断处理函数同普通的函数并无太大的区别,但由于它是运行在中断上下文(interrupt context)中的,所以他不能休眠和引起阻塞。

中断处理函数的原型在linux/interrupt.h中:

typedef irqreturn_t (*irq_handler_t)(int, void *);

如我们可以定义一个中断处理函数:

static irqreturn_t m_key_irq_handle(int irq, void *dev)
{	
    … …
	return IRQ_HANDLED;
}

其中第一个参数是中断号。第二个参数是我们注册中断时传入的一个指针通常我们传入的是我们的设备结构体。我们通过request_irq函数来注册我们的中断处理函数,他的原型是:

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

irq是要申请的中断号。

handler即使我们的中断处理函数,dev_id即是要传给中断处理函数的第二个参数。

irqflags是中断处理的属性,可以指定中断的出发方式及处理方式。这里列出几个比较重要的flag:

         IRQF_DISABLED-当该位被设置时在执行相应的中断处理函数时内核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值