如何通知用户空间应用程序驱动程序已在linux中收到中断?

时间:2012-07-06 17:01:09

标签: linux signals driver pid pci-e

我有一个PCIe设备,当数据缓冲区准备好被读取时,它将发送硬件中断。我认为最好的方法是使用信号,但我不完全确定如何。我认为我需要做的是:

  1. 保存用户空间应用程序的PID,以便驱动程序知道将信号发送到何处
  2. 在PCIe设备驱动程序的中断处理程序中,向用户空间应用程序发送信号
  3. 在用户空间应用程序中实现用于处理信号的信号处理函数
  4. 我不确定如何做其中任何一项。 如何/在哪里保存用户空间应用程序的PID? 如何从驱动程序的中断处理程序向该特定PID发送信号(我相信我应该使用kill命令,但我对获取PID的语法更感兴趣)? 保存PID后,如何让用户空间应用程序等待信号? 是否可以在保存PID后继续运行用户空间应用程序,在收到信号时运行信号处理函数,并继续运行信号到达之前的位置? (类似于ISR的工作原理)

3 个答案:

答案 0 :(得分:2)

请勿使用此信号。实现角色设备。用户空间应用程序将open,然后调用read并将被阻止,直到您的驱动程序确定有可用数据为止。

我认为请参阅Linux Device Drivers第3章。

答案 1 :(得分:0)

必须直接在内核中处理中断。为了将PID传递给内核,必须使用设备文件抽象(例如field=3 # set the number of fields sed ' s/\([^ ][^ ]*\)/&/'"$field"' # match each field and operate the substitution on the last field t # if the last field is not empty jump to end s/$/ NA/ # substitute the end of line with delimiter (4 spaces) and NA ' infile cat infile aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj output aaaa bbbb cccc dddd eeee NA ffff gggg hhhh iiii jjjj NA 调用),但它也通过读/选提供异步通知,以便替换信号解决方案。

答案 2 :(得分:0)

这是一个老问题,但要从应用程序用户空间管理IRQ,现在更好的方法是在/ dev / uioX上使用UIO驱动程序和轮询/选择调用。