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

起因

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

异常一:无法动态获取 IP

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

经过重新审查硬件设计,发现物理 PCB 的 layout 图与原理图中的 tx_ctrl 信号不一致------硬件把 tx_ctrl 和 rx_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 的型号。

总结

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

相关推荐
贞明电子6 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
HideF6 小时前
Linux
linux·服务器·网络
万联WANFLOW6 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
sbjdhjd6 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
吠品7 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery11408 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
taktok_ai9 小时前
用 cc-switch 连接 Taktok
网络
乌恩大侠9 小时前
从 AI-RAN 到 AI Agent:基于 NVIDIA Nemotron 构建 5G/6G 智能网络故障诊断系统
服务器·人工智能·5g·o-ru·ai-ran·电信大模型
小嘉丶学长11 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节