我们已经创建了自己的网络设备驱动程序。 在我们发送tx函数中的任何数据(使用.ndo_start_xmit注册的数据)之前,我们需要等待硬件准备就绪。由于我们无法在原子上下文中休眠/等待,因此我们通过在tx函数内调度工作队列来实现一种解决方法。然后,工作队列可以等待硬件准备就绪并发送数据。
有更好的方法吗?即,立即从.ndo_start_xmit()返回,但同时安排帧在准备就绪时发送到硬件。
有关我们实施的其他信息: 我们在调度工作队列之前从.ndo_start_xmit()调用netif_stop_queue()。 当工作队列处理程序执行时,我们在将帧发送出硬件后立即在其中调用netif_start_queue()。 这工作正常,但有时我们会收到此错误:
NOHZ: local_softirq_pending 08
当然在此过程中存在延迟,但它在我们当前的应用程序中工作正常。我们的网络芯片通过SPI连接到我们的处理器,并且可以通过SPI接收以太网帧。这些以太网帧通过芯片在物理介质上进一步传输。
我们在imx233上使用内核版本2.6.31。