为skb结构手动分配数据缓冲区

时间:2013-03-20 11:56:53

标签: linux-kernel linux-device-driver

我有两块板通过PCIE总线连接。他们可以通过预先分配的消息缓冲区交换数据。现在我尝试基于此连接实现虚拟网络接口。 引用一些网络驱动程序源显示它们实现了接收路径的两种方法:

  • 使用dev_alloc_skb()在接收函数内分配skb,并将数据复制到为此skb分配的缓冲区。
  • 使用dev_alloc_skb()分配skb并将其缓冲区放入RX环。

在这两种情况下,缓冲区由dev_alloc_skb()分配。我只想分配skb控件头,并将data指针指向我的消息缓冲区。我们还必须修改skb_free()以将消息缓冲区放回消息池。

任何人都可以告诉我,如果有任何参考代码也使用类似的方法或请提出一个更好的方法,以尽量减少代码更改。任何建议表示赞赏。先谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用build_skb

  

所以交易将是仅为NIC分配数据缓冲区   填充其RX环缓冲区。并在RX完成时使用build_skb()   将数据缓冲区(现在填充以太网帧)附加到新的skb,   初始化skb_shared_info部分,并将热门skb提供给网络   叠加。

     

build_skb()是分配skb的函数,调用者提供   应附加到它的数据缓冲区。司机应该打电话   在skb_reserve()之后build_skb() skb->dataNET_SKB_PAD指向   以太网帧(通常跳过NET_IP_ALIGN和{{1}})