我有一个需要的驱动程序:
最初的计划是让应用程序处理第3步,但是在下一组数据从FPGA到达之前,应用程序无法及时处理数据。
有没有办法强制调度程序(来自驱动程序)运行我的应用程序?
如果没有,我认为工作队列可能是我需要使用的解决方案,但我不确定如何/在何处调用网络堆栈/驱动程序来完成工作队列的UDP传输。
有什么想法吗?
答案 0 :(得分:0)
您应该尝试发现为什么应用程序“无法足够快地获取数据”。
你的内存带宽可能远远超过了典型的以太网带宽,所以即使将数据从驱动程序传递到应用程序也需要复制。
如果udp链接在用户空间中不够快,那么在内核空间中它将不会更快。 你需要做的是:
您可以将应用程序拆分为两个共享缓冲区列表
线程A等待驱动程序提供数据,并将其放在列表的尾部。
线程B从列表头部读取数据,并通过UDP发送。如果由于某种原因线程B忙于等待发送特定缓冲区,则fifo会填充一点,但只要UDP链路带宽大于来自DSP的数据速率就可以了。
将内容移动到内核中并不会使事情变得更加神奇,因此编写和调试和跟踪变得更加困难。