我目前正在编写我的第一个Linux网络驱动程序,现在看起来相当顺利。我的网络设备将创建以太网接口,但通过PCIe将以太网帧转发到PCIe端点。我的问题与从PCIe端点接收转发的以太网帧到我的接口有关。
我通常会做的是分配一个大的DMA缓冲区,告诉端点具有缓冲区所在的总线主控功能,并允许它DMA到该缓冲区。然后它会发送一个中断信号接收,我可以将数据复制到sk_buf
。
我的问题是:
在LDD3中,它表示我应该能够直接DMA到sk_buf
,因为所有sk_buf
都在DMA存储器中。我何时何地分配此缓冲区并告诉总线主站它位于何处?我是先在初始化时做的,然后一旦总线主机写了它的第一个sk_buf
并中断我的信号接收,我是否分配一个新的缓冲区并写入新的位置?这只能通过启用轮询(我认为它叫做NAPI)接收来完成吗?
提前感谢您的帮助。