Interrupt Handling [LDD3 9]

device的IO region可以用来控制device,但是还不够。一个device,往往会有外界有交互,当外界发生了某个事件,需要device做出某种响应,driver也需要做处理。那就要有一种机制,让device能够通知到driver,这就是中断的作用。

driver能做的,其实就是实现一个handler,当device中断产生时,handler能够正确处理这个中断就可以了。在讲中断之前,有一点要记住,interrupt handler是和其他的code并发运行的,因此handler里一定要考虑竞争和并发的问题。

中断线是kernel里很宝贵又很稀有的资源,一共只有15/16个,driver在使用中断之前要申请中断线资源,使用完后释放。在很多情况下,kernel中可能有多个driver要share同样的中断线。

获取中断资源的函数:

<linux/interrupt.h>
int request_irq(unsigned int irq, 
                irqreturn_t (*handler)(int, void *, struct pt_regs *),
                unsigned long flags,
                const char *dev_name,
                void *dev_id);

void free_irq(unsigned int irq, void *dev_id);
发布了32 篇原创文章 · 获赞 6 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/scutth/article/details/105399352