1. 问题现象与初步分析
最近在调试基于Zynq-7000和KSZ9031千兆PHY的硬件平台时,遇到了一个典型问题:PetaLinux系统启动后,ifconfig显示网卡已Link UP,但始终无法Ping通任何设备。这种"假连接"状态在嵌入式网络调试中相当常见,特别是使用RGMII接口时。
从硬件角度看,Zynq-7000通过RGMII接口连接KSZ9031 PHY芯片,理论上只要时钟和数据线连接正确,最基本的通信应该能建立。但实际情况是:
code复制# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0A:35:00:22:01
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:43
关键指标是"RX packets:0"和"TX packets:0",说明虽然链路层显示连接,但实际没有数据包收发。这种情况通常指向以下几个方向的问题:
- PHY芯片初始化不完整(特别是RGMII时序参数)
- Linux内核驱动与硬件不匹配
- FPGA侧的RGMII接口时序约束不当
- 硬件设计上的信号完整性问题
2. 驱动层问题排查
2.1 检查当前使用的PHY驱动
首先查看系统实际加载的PHY驱动:
code复制# dmesg | grep -i phy
[ 3.120000] libphy: Fixed MDIO Bus: probed
[ 3.130000] lib
