千家信息网

树莓派4有线网卡驱动调试的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了树莓派4有线网卡驱动调试的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。树莓派4有线网卡驱动调试笔记1.概述
千家信息网最后更新 2026年11月01日树莓派4有线网卡驱动调试的示例分析

这篇文章主要介绍了树莓派4有线网卡驱动调试的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

树莓派4有线网卡驱动调试笔记

1.概述

从树莓派底层玩家的角度上来看,树莓派4算的上一款比较好的开发板。在树莓派4之前,有线网卡的驱动都是接在USB设备上,也就是说之前的树莓派都是必须启用了USB协议,然后再开启网卡,这样网速的差别以及网络处理效率上的差别也就不敢恭维了。博通bcm的网卡芯片还是不错的,这次为树莓派4适配和千兆以太网口,配上树莓派4的a72的4核的芯片,真的算是非常的良心的开发板了。学习网络编程,除了熟悉各种TCP,UDP的协议之外,如果能够了解底层驱动的工作原理,那也算是锦上添花的事情。本文主要针对树莓派4有线网卡的驱动模型,以及数据收发的方式,进行梳理总结,同时学习一些比较好的网卡设计模式。

2.树莓派4的有线网卡简介

对于树莓派4的有线网卡来说,网上的资料相当的匮乏,我只能通过零星的碎片化的资料去推测树莓派网卡的行为,结合uboot与Linux的代码,将其适配到rt-thread的lwip协议栈上,完成树莓派的联网功能。相关的代码可以参考

https://github.com/RT-Thread/rt-thread/blob/master/bsp/raspberry-pi/raspi4-32/driver/drv_eth.c

树莓派4搭载的是Broadcom GENETv5也就是博通第五代的genet,具体来说适配的是Broadcom® BCM54213PE单端口GRMII千兆以太网收发器,具体的芯片手册可以通过下面的地址进行下载

https://gitee.com/bigmagic/raspi_sd_fw/blob/master/doc/raspi4/BCM54213PE_datasheet.PDF

这是一款三速1000BASE-T / 100BASE-TX / 10BASE-T千兆以太网(GbE)收发器,集成在单个CMOS芯片中。BCM54213PE是一款高度集成的解决方案,集成了数字自适应均衡器,ADC,锁相环,线路驱动器,编码器,解码器,回声消除器,串扰消除器以及所有必需的支持电路。BCM54213PE基于Broadcom公认的数字信号处理器技术,完全符合RGMII标准,可与行业标准的以太网MAC和交换机控制器兼容。

3.设计思路

在写任何代码实现的时候都应该有设计,设计的好坏直接决定最后成型的效果。而调试驱动也不要走一步看一步,应该用高屋建瓴的思维去看待问题的解决办法,先做什么,后做什么,两者之间的关联是什么,复杂模块的调试往往涉及到几个器件的耦合,而这些耦合的特性往往就是驱动调试的线索。和玩游戏一样,顺着一个一个的线索,终将解决驱动的通路。

而调试网卡驱动的时候,也必须注意两个东西一个是串行管理数据总线接口(MDIO),另外就是芯片与网卡的控制器寄存器。

MDIO接口是两根数据线,MDC和MDIO,通过这两根线,微控制器可以访问物理层芯片中介绍的寄存器组,这些寄存器组则决定了物理层的连接的相关信息,比如查询到的网口的速率,网口的状态等等。

第二个就是和芯片直接相关的数据处理寄存器,例如DMA控制,中断控制等等。

要想调通网卡数据,上面两点都是需要理解和掌握的。

4.调试树莓派4有线网卡的历程

在调试过程中,我发现网络网口是由路由器网络网口速度匹配的,所以需要由MDIO进行通信,查询网卡芯片的状态,从而判断当前连接的路由器是千兆网卡还是百兆网卡。如果不进行判断,那如果速率不匹配是无法进行上层数据通信的。

另外就是上电之后,有线以太网数据收发器内部是有收发计数的,而这个计数z值会与我后面的DMA链表直接关联,所以每次初始化之后,都需要清除计数,这个需要一点时间,需要延时一下,最好做个判断,直到清空为止。

上面是两个关键的细节,其他的流程倒也没什么特别需要注意的。接着就需要理解DMA数据链表的结构了。

在树莓派4上,管理网络数据收发是由DMA链表组成的结构体。每个收发链表共有256个DMA描述符,每个描述符分别记录着

1.高位地址(64位地址的高32位)

2.低位地址(64位地址的低32位)

3.接收的最大长度信息

关于接收的顺序,如果之前没有接受到任何数据,当一帧网络数据包到来时,DMA链表会从0偏移处的DMA链表开始取数据,然后将接收到的数据放到DMA描述符申明的地址处。

需要注意的是,对于接收的DMA描述符,每个描述符指向的应该都是一段非cache区的地址,因为往往cache的使用会引起内存一致性的问题,而通过cache数据的写回也可以解决这个问题。我们在分配内存的时候,可以分配一整段的空间,比如由256个描述符,假设每个接收包的最大长度为2K,则需要分配512K的连续的内存空间来进行数据的接收,每当一个包过来后,指针会自动指向下个dma描述符,这个是由硬件完成,与软件无关。另外一个指针则是判断当前读到了哪个dma描述符,随着数据量的不断累积,数据会一直存在下个描述符中,并不会由于处理速度跟不上而导致丢包情况的发生。

这种设计是很好的,避免了网络数据多而快导致的丢包问题的产生,同时通过指针的偏移又大大简化数据读出的模型。

而数据的发送则不用设计的如此复杂,当然硬件上也是有着这个描述符的,对于简单的应用,直接用一个描述符去填充需要发送的数据即可,交给DMA,然后等待发送中断的到来。

5.树莓派4的有线网卡中断通知

树莓派4上有着标准的GIC,对于中断的处理更加的通用化。

查询其数据手册,可以看到中断号为29,这里只是一个外设中断号而已,还要经过GIC的分发,所以按照GIC的路由规则

最后可以算出其中断号为160+29,有了这个中断号,然后配置bcm2711的有线以太网中断控制器,打开DMA接收完成和发送完成中断就可以产生相关的中断了。

感谢你能够认真阅读完这篇文章,希望小编分享的"树莓派4有线网卡驱动调试的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

数据 树莓 网卡 有线 芯片 驱动 地址 网络 以太 设计 以太网 网口 控制 寄存器 篇文章 问题 处理 卡驱动 有线网 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京互联网科技有限公司 互联网科技公司发展 迪茉互联网科技 凡科互联网科技 银优互联网科技有限公司 上海喔噻互联网科技 互联网科技产品 苏州五指互联网络科技有限 晋城互联网科技 互联网方面的科技前沿 四川互联网展示科技馆设计 半导体是互联网高科技吗 广东鹅鹅鹅互联网科技有限公司 互联网金融运营模式中的金融科技 北京互联网科技类企业分布 广州三三互联网科技有限公司 互联网的科技体现在哪里 互联网科技创新方面的资料 互联网科技创业有什么好项目 每日互联网科技新闻 互联网 科技创新 互联网金融科技委员会 现代科技和互联网有关系吗 随着互联网科技发展 互联网5g黑科技有哪些 消费医药和互联网科技 烟台灵鸽互联网科技有限公司 中天科技中国工业互联网 数字互联网科技有限公司 互联网科技快速发展优美句子
0