0

我有一个想移植到 Linux 的 Windows 设备驱动程序。

我们的用户空间应用程序经常需要等待驱动事件。这是我们在 Windows 上使用的机制:

  1. 应用程序创建一个 WaitHandle
  2. 应用程序通过 ioctl 将此 WaitHandle 提供给驱动程序
  3. 驱动程序可以使用 ObReferenceObjectByHandle 访问此句柄并使用 KeSetEvent 设置它

我喜欢这个:

  • WaitHandle 可以来自任何地方(可以是 AutoReset 或 ManualReset,可以是 .Net WaitHandle 等)
  • 该进程不必使 ioctl 进入睡眠状态,而只需调用通常的 WaitForSingleObject。

我想在我的 Linux 驱动程序中保持相同的架构。

有谁知道我如何在 Linux 上获得相同的行为?

4

1 回答 1

1

一个简单的想法是创建一个具有阻塞读取的字符设备。用户应用程序从设备中读取;这样的读取会阻塞,直到事件发生。

编辑:

另一个想法是向用户空间应用程序发送信号,其处理程序将设置用户空间等待句柄(可能是 futex)。

于 2012-08-24T08:14:58.430 回答