2013-03-20 117 views
1

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

  • 使用dev_alloc_skb()分配接收函数内skb和数据复制到分配给该skb缓冲区。
  • 使用dev_alloc_skb()分配skb并将其缓冲区放入RX环。

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

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

+0

我也在努力解决类似的问题,有什么办法没有,你把HTTP:/? /stackoverflow.com/questions/40857686/mapping-1-mib-of-reserved-memory-for-network-interface-cardnic-driver-in-arm-l – shunty 2016-12-26 09:58:24

回答

0

你可以使用build_skb

那么这笔交易将是为网卡只分配数据缓冲区 填充其RX环形缓冲区。并且在RX完成时使用build_skb()至 将数据缓冲区(现在填充以太网帧)附加到新的skb, 初始化skb_shared_info部分,并将热skb分配给网络 堆栈。

build_skb()是分配skb的函数,调用者提供应连接到它的数据缓冲区 。司机预计build_skb()后有权要求 skb_reserve()skb->data指向 以太网帧(通常跳过NET_SKB_PADNET_IP_ALIGN