我有一个PCIe设备,当数据缓冲区准备好被读取时,它将发送硬件中断。我认为最好的方法是使用信号,但我不完全确定如何。我认为我需要做的是:
我不确定如何做其中任何一项。 如何/在哪里保存用户空间应用程序的PID? 如何从驱动程序的中断处理程序向该特定PID发送信号(我相信我应该使用kill命令,但我对获取PID的语法更感兴趣)? 保存PID后,如何让用户空间应用程序等待信号? 是否可以在保存PID后继续运行用户空间应用程序,在收到信号时运行信号处理函数,并继续运行信号到达之前的位置? (类似于ISR的工作原理)
答案 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驱动程序和轮询/选择调用。