【发布时间】:2012-07-06 17:01:09
【问题描述】:
我有一个 PCIe 设备,它会在数据缓冲区准备好读取时发送硬件中断。我相信最好的方法是使用信号,但我不完全确定如何。我认为我需要做的是:
- 保存用户空间应用程序的 PID,以便驱动程序知道将信号发送到哪里
- 在 PCIe 设备驱动程序的中断处理程序中,向用户空间应用程序发送信号
- 在用户空间应用程序中实现一个信号处理函数来处理信号
我不知道怎么做。 如何/在哪里保存用户空间应用程序的 PID? 如何从驱动程序的中断处理程序向该特定 PID 发送信号(我相信我应该使用 kill 命令,但我对获取 PID 的语法更感兴趣)? 如何让用户空间应用程序在保存其 PID 后等待信号? 是否可以让用户空间应用程序在保存其 PID 后继续运行,在收到信号时运行信号处理函数,并在信号到达之前继续运行? (类似于 ISR 的工作方式)
【问题讨论】:
-
不确定信号是否是正确的方法。也许 char 设备更适合这里?然后用户空间应用程序可以使用
select或poll知道何时处理缓冲区。 -
好吧,我需要在用户空间应用程序中读取缓冲区,才能像中断一样工作。我不想实现其他版本的轮询。目前我只是轮询设备以获取在缓冲区已满时设置的特定标志。也许这仍然可以使用 char 设备,尽管我对它们不太熟悉。
-
poll(2)对于函数的作用来说并不是一个好名字——它实际上并不轮询,它等待一个事件(如select(2))。请参阅此处的 linux 设备驱动程序书:xml.com/ldd/chapter/book/ch05.html#t4
标签: linux signals driver pid pci-e