3

我们已经创建了自己的网络设备驱动程序。有一种情况,我们需要等待硬件准备就绪,然后才能在 tx 函数(使用 注册的函数.ndo_start_xmit)中发送任何数据。由于我们不能在原子上下文中休眠/等待,因此我们通过在 tx 函数中调度工作队列来实现一种解决方法。然后工作队列可以等待硬件准备好并发送数据。

有一个更好的方法吗?即.ndo_start_xmit()立即返回,但同时安排帧准备好时发送到硬件。

有关我们实施的其他信息:我们在安排工作队列之前调用netif_stop_queue().ndo_start_xmit()当工作队列处理程序被执行时,我们netif_start_queue()在将帧发送到硬件之后在它内部调用。这工作正常,但有时我们会收到此错误:

NOHZ: local_softirq_pending 08

当然,这个过程中存在延迟,但它在我们当前的应用程序中运行良好。我们的网络芯片通过 SPI 连接到我们的处理器,并且可以像通过 SPI 一样接收以太网帧。这些以太网帧由芯片在物理介质上进一步传输。

我们在 imx233 上使用内核版本 2.6.31。

4

0 回答 0