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

总结

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

相关推荐
0+1114 小时前
Linux --基础IO
linux·运维·服务器
CZIDC4 小时前
华为服务器TS200-2280 V2 iBMC导入SSL证书后问题案例分析
服务器·https·ssl
数据知道5 小时前
PHP 代码审计实战——ThinkPHP、Laravel 历史漏洞模式深度剖析
android·网络·web安全·网络安全·php·laravel
Romantic_love_5 小时前
USART串口初始化源码解析
stm32·单片机·嵌入式硬件·学习
oshan20125 小时前
零基础STM32入门教程--11-USART/UART 串行通迅
stm32·单片机·嵌入式硬件
牢姐与蒯5 小时前
Linux进程(四).进程优先级以及进程切换,进程调度
linux·运维·服务器·ubuntu
大爱编程♡5 小时前
Linux C 语言文件 IO 与构建工具实战指南
linux·服务器
rcms152702692185 小时前
HITACHI 560BIR01 1KGT034000R0101 二进制输入模块
网络
yyuuuzz6 小时前
企业出海云服务器部署踩坑记录:从频繁超时到稳定运行的复盘
运维·服务器·网络·人工智能·aws
集芯微电科技有限公司7 小时前
700V/17A高频开关低导通阻GaN HEMT驱动器适用于快充,LLC,PFC功率校正
人工智能·嵌入式硬件·深度学习·神经网络·机器学习·生成对抗网络·计算机外设