千兆以太网卡(Ethernet)驱动初始化完成,但是无法udhcpc获取ip

起因

我现在从事 Linux 驱动工程师一职。在试用期时,硬件同事给了我一块板子,让我进行驱动适配和移植。板子上的千兆网卡驱动加载完成后,出现了异常状态(平台为 RK3576)。

异常一:无法动态获取 IP

网卡驱动初始化正常,没有报错,phy_id 能够正常识别。但无法通过 udhcpc 命令从交换机动态获取 IP(确认公司 IP 段下的子 IP 数量充足)。

经过重新审查硬件设计,发现物理 PCB 的 layout 图与原理图中的 tx_ctrl 信号不一致------硬件把 tx_ctrlrx_ctrl 两条控制线接反了。

**注意:**发送和接收控制线接反并不影响内核 Ethernet 驱动的运行,但会导致网卡无法正常使用。

异常二:千兆/百兆协商异常,百兆交换机可以得到IP,在千兆交换机中得不到IP(晶振的锅)

解决异常一后,又出现新情况:

  • 网卡设备节点初始化完成,系统能识别网卡节点。
  • 插入千兆交换机:交换机端口不亮,无法通过 udhcpc 获取 IP,手动设置静态 IP 也无法与电脑 ping 通。
  • 插入百兆交换机:交换机状态灯亮,但仍无法通过 udhcpc 获取 IP;手动设置静态 IP 后可与电脑互相 ping 通。

排查思路

经过一整天的软件排查,未发现问题。于是转换思路:百兆可用,千兆不可用,问题可能出在网络协商阶段。

驱动代码在协商阶段出问题的概率极低,因为使用的是瑞芯微评估板 SDK,已经过严格测试和批量生产。因此,怀疑是硬件问题。

协商过程(参考 深入了解以太网 PHY 自协商过程)涉及 PHY 与 GMAC 之间的速率协商,而 PHY 的工作速率依赖于外部时钟晶振(设备树驱动中已配置为外部时钟模式)。

问题根因

使用示波器抓取晶振波形,发现频率仅为 24 MHz。由于硬件设计采用 RGMII 外部供应时钟给 PHY 芯片,要跑千兆网络,PHY 芯片必须获得标准的 25 MHz 时钟。

最终定位原因:硬件外发打板时,BOM 表中晶振规格被错误地换成了 24 MHz 的型号。

总结

这次经历虽然"坑人",但也积累了宝贵的调试经验:当软件层面排查无果时,需果断转向硬件信号测量,尤其是时钟、电源等基础信号。

相关推荐
M78佐菲19 小时前
ARM学习笔记(三)
linux·arm开发·笔记·嵌入式硬件·学习
爱研究的小梁19 小时前
异构链路科普:5G/4G、卫星、专网、WiFi、光纤,如何聚合工作?
网络·网络协议·udp·信息与通信
网硕互联的小客服19 小时前
如何用Claude Code重构遗留系统?
网络
程序猿乐锅19 小时前
【黑马点评 | 第二篇】Redis 缓存更新策略与商铺缓存实现
java·网络·redis·spring·mybatis
Doris__HE19 小时前
【元脑服务器NF8480G7-NF8480M7技术规格分享】
运维·服务器·数据库·缓存·性能优化
科技小登19 小时前
业务层四道闸:DDoS+CC、API、Bot 与全球加速的分层防护设计与选型
网络·安全
wuyk55519 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 12 章 Linux 系统 WiFi 常用命令全集:iw/iwlist/ip/wpa_cli 实战
linux·网络·stm32·物联网·tcp/ip
骇客野人19 小时前
Java 前后端可部署落地架构方案
服务器·前端·微服务
IT小白杨19 小时前
跨境电商账号关联归因链路拆解与可落地环境配置
服务器·网络·经验分享·安全·指纹浏览器
威嵌神州19 小时前
天脉 3 开发环境与 BSP 适配:IDE license、驱动开发、飞腾平台
ide·驱动开发·嵌入式硬件·fpga开发