Kernel 驱动程序中使用了request_-irq(),为什么不使用request_-irq()?两者有什么区别?

Kernel 驱动程序中使用了request_-irq(),为什么不使用request_-irq()?两者有什么区别?,kernel,irq,Kernel,Irq,我发布了这个帖子,讨论了关于请求的问题,但是我没有得到任何回复。所以我现在就把它贴出来 我正在为电容式触摸屏开发一款触摸屏驱动程序。它使用request\u threaded\u irq()调用而不是request\u irq()。我无法理解两者之间的基本区别。它说:- 名称 请求\u线程化\u irq-分配中断行 简介 int-request\u-threaded\u-irq(未签名的int-irq、irq\u-handler\u-t-handler、irq\u-handler\u-t-thr

我发布了这个帖子,讨论了关于请求的问题,但是我没有得到任何回复。所以我现在就把它贴出来

我正在为电容式触摸屏开发一款触摸屏驱动程序。它使用request\u threaded\u irq()调用而不是request\u irq()。我无法理解两者之间的基本区别。它说:-

名称

请求\u线程化\u irq-分配中断行

简介

int-request\u-threaded\u-irq(未签名的int-irq、irq\u-handler\u-t-handler、irq\u-handler\u-t-thread\fn、未签名的长irqflags、const-char*devname、void*dev\u-id)

参数

  • irq-要分配的中断行
  • handler—发生IRQ时要调用的函数。如果为NULL且线程为_fn!=如果安装了默认的主处理程序,则为NULL
  • thread_fn-从irq处理程序线程调用的函数如果为NULL,则不创建irq线程
  • irqflags-中断类型标志
  • devname—声明设备的ascii名称
  • dev_id-传递回处理函数的cookie
  • 处理程序和线程参数是容易混淆的参数。此外,驱动程序中未定义工作功能

    有人能帮我理解一下吗?

    添加了request\u threaded\u irq()函数,允许开发人员将中断处理代码分成两部分。一部分将在中断被阻塞的情况下执行,另一部分可以由内核线程在不阻塞中断的情况下执行。有关原因的详细信息,请阅读以下内容:

    在您的情况下,您链接到的驱动程序执行以下操作:

    err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread,
                               IRQF_TRIGGER_RISING, "touch_reset_key", ts);
    
    通过为第二个参数“handler”传递NULL,当检测到中断时,将调用thread_fn的参数或函数cy8ctmg110_irq_thread()

    对于您来说,选择哪个请求irq函数将取决于您的驱动程序在中断上下文中需要做什么。

    另一个重要方面:“如果要为设备设置线程化irq处理程序,则需要提供处理程序和线程\u fn。处理程序仍然在硬中断上下文中调用,并且必须检查中断是否源自设备。如果是,则需要禁用设备上的中断并返回IRQ\U WAKE\U THREAD,这将唤醒处理程序线程并运行THREAD\U fn


    来源:

    Alan,如果在线程已经运行时中断再次发生,会发生什么?会启动线程的新实例吗?还是会忽略中断?