千兆以太网卡(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 的型号。

总结

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

相关推荐
Moshow郑锴1 小时前
qlik-cli - Get started with examples
服务器·windows·microsoft
男孩李2 小时前
浅谈Linux的last命令
java·linux·服务器
夫唯不争,故无尤也2 小时前
Ubuntu阿里云服务器一键安装RustDesk指南
服务器·ubuntu·阿里云
遗悲风2 小时前
防火墙双 ISP 出口 IP-Link 链路检测、NAT 与 Web 认证综合实验
tcp/ip·安全·接口隔离原则·防火墙
csdn杰哥2 小时前
瑞萨单片机开发教程[二十六] DMAC 存储器数据传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5
求知喻2 小时前
串口中断模式
单片机·嵌入式硬件
ACP广源盛139246256732 小时前
GSV6155@ACP# Type-C 视频信号转换芯片:技术架构、工程痛点适配与落地场景分析
大数据·c语言·开发语言·人工智能·分布式·嵌入式硬件·架构
光子物联单片机2 小时前
STM32传感器模块编程实践(二十一)DIY语音控制小车套件模型
c语言·stm32·单片机·嵌入式硬件·mcu
软件技术员2 小时前
SSL.com 证书:免费单域名 90 天证书
网络·网络协议·ssl