我发布了这是讨论request_threaded_irq的主题,但没有得到任何答复。因此,我正在重新发布它。
我正在开发用于电容式触摸屏的触摸屏驱动程序。它使用request_threaded_irq()调用而不是request_irq()。我无法理解两者之间的基本区别。它说 :-
名称
request_threaded_irq —分配中断行
简介
int request_threaded_irq(无符号的int irq,irq_handler_t处理程序,irq_handler_t thread_fn,无符号的长irqflags,const char * devname,void * dev_id);
参数
Handler和Thread_fn参数令人困惑。此外,驱动程序中未定义任何工作功能。
Here is the driver which I am refering to.
有人可以帮助我理解这一点吗?
最佳答案
添加了request_threaded_irq()函数,以允许开发人员将中断处理代码分为两部分。一部分将在中断被阻止的情况下执行,另一部分可以由内核线程在不中断被阻止的情况下完成。有关原因的详细信息,您可以阅读以下内容:
http://lwn.net/Articles/302043/
对于您而言,链接到的驱动程序可以执行以下操作:
err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread,
IRQF_TRIGGER_RISING, "touch_reset_key", ts);
在检测到中断时,将为第二个arg(处理程序)传递NULL,从而调用thread_fn的参数或函数cy8ctmg110_irq_thread()。
对于您来说,选择哪个请求irq函数将取决于您的驱动程序在中断上下文中需要执行的操作。
关于kernel - 在驱动程序中使用request_threaded_irq()为什么不使用request_irq()?两者之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7685294/