我正在开发一个 Linux DMA 驱动程序。用户空间应用程序希望驱动程序执行异步操作(数据传输)并仅在操作完成时得到通知。用户空间应用程序如何获得异步通知?
我知道在内核空间中,可以安装一个中断处理程序来处理完成中断。我的问题是针对用户空间的,因为我的数据必须在用户空间中处理。我能想到的是在用户空间创建一个线程,等待驱动完成任务。有没有更好的方法来处理这个?还是我想错了方向?
更一般地说,如何在用户空间处理 Linux 的中断?
poll
通常的方法是为您的设备驱动程序实现一个功能。此函数应将任务添加到一个或多个等待队列。然后,您的中断处理程序可以唤醒在队列中等待的任务。
poll
当用户空间任务调用poll
或select
在与您的驱动程序关联的文件描述符上调用您的驱动程序的实现。因此,从用户空间进程的角度来看,这就像等待其他任何东西(如网络套接字)一样。事实上,这与磁盘或网络驱动程序用来唤醒等待 I/O 的进程的机制相同。
有关充实的示例,请参见http://www.xml.com/ldd/chapter/book/ch05.html#t3 。