分享好友

×
取消 复制
【原】Linux-千兆网卡驱动实现机制浅析(4)
2020-06-15 17:03:35

6. 网卡驱动程序的设计
编写网卡驱动程序,需要对以下三类结构体进行相应的操作:
1.与网络协议栈相关的结构体,如sk_buff结构体。
2.网卡和协议栈接口相关的结构体,如net_device结构体。
3.与I/O总线相关的结构体,如利用PCI总线进行数据包传送的DMA缓冲区以及表示网卡的pci_dev结构体。
设计网卡驱动时,需要针对以上的数据结构实现相应的功能,如对sk_buff结构的操作实现对数据包的有效控制;对net_device结构的操作可以对网卡进行操作(如开启、关闭等),可以发送数据包以及轮询数据包,可以制定网卡的相应的定时操作以及统计数据包,可以为用户提供配置功能(ethtool)等。在设计网卡驱动时,需要考虑如何与上层协议的协调以及对底层总线地址的控制。
有关网卡驱动程序更详细的设计流程可以参考《Essential Linux Device Driver》及《Linux Device Driver 3rd》。

7. 总结
本文的分析重点为网卡驱动中涉及到的重要数据结构,以及发送和接收数据包的实现,对这些实现机制了解后,对于设计和实现驱动程序应该会有帮助,因为该机制本身难度很大,加上作者水平有限,其中的分析结论不能保证完全正确。


尚有不能明确的问题,希望大牛们能帮我解答:
1.PCI总线地址与网卡物理地址这两个之间的关系,我一直不是很清楚,所以以上的分析都未明确说明,在画图时都忽略了这部分细节;
2.DMA buffer在接收包和发包时这其中的ring是如何详细调度的;


文章来源CU社区:【原】Linux-千兆网卡驱动实现机制浅析

分享好友

分享这个小栈给你的朋友们,一起进步吧。

内核源码
创建时间:2020-05-18 13:36:55
内核源码精华帖内容汇总
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~