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