瑞芯微RK平台网络与高速接口排障一般分四级:PHY/物理先通(reset、MDIO、供电),再协商(ethtool 看 GMAC 速率、lspci看PCIe Link),再数据面(RGMII tx/rx delay、驱动绑定),最后性能(iperf3/DPDK、PCIe 带宽)。基于触觉智能RK3576开发板Purple Pi OH2的双千兆网口与与其M.2 PCIe实测,按 GMAC→DPDK→PCIe 逐层给命令。
本板 gmac0/gmac1 双千兆(PHY走rgmii 模式),GMAC 驱动用RK3568系列 ops(dwmac-rk.c)。排障顺序:PHY 识别 → 协商速率 → delayline/时序 → 数据面 → 性能。
关注「触觉智能」CSDN,联系客服即可获取瑞芯微RK开发板/核心板相关资料,可对接技术支持团队,咨询项目选型与项目需求。
关注触觉智能,可获赠RK3576开发板折扣。机会有限,先到先得!
网口不通/协商不上/RGMII delayline
网口问题九成落在PHY识别与RGMII时序。本板gmac0配置(ido-evb7609-v1a.dtsi):
&gmac0 { phy-mode = "rgmii"; /* RGMII 模式 */ clock_in_out = "output"; snps,reset-gpio = <&gpio2 RK_PD6 GPIO_ACTIVE_LOW>; snps,reset-delays-us = <0 20000 100000>; pinctrl-0 = <ð0m0_miim ð0m0_tx_bus2 ð0m0_rx_bus2 ð0m0_rgmii_clk ð0m0_rgmii_bus>; tx_delay = <0x1a>; /* RGMII 发送延时 */ rx_delay = <0x26>; /* RGMII 接收延时 */ phy-handle = <&rgmii_phy0>; status = "okay"; };现象 | 根因 | 处理 |
|---|---|---|
eth 起不来 / PHY 不识别 | PHY 复位/上电时序、MDIO 没通、phy-handle 错 | dmesg | grep -iE "phy|stmmac|eth0";查 snps,reset 与 MDIO |
协商不到千兆 / 只有百兆 | 线缆/对端/PHY 能力 | ethtool eth0 看 link/speed |
通了但丢包/速率极低/偶发不通 | RGMII delayline/时序 (tx_delay/rx_delay 不对) | 调 tx_delay/rx_delay(本板 0x1a/0x26),参考官方 GMAC_RGMII_Delayline 文档 |
RGMII 是排障重点:MAC 与 PHY之间的信号延时靠 tx_delay/rx_delay补偿,值不对就出现"能ping通但吞吐崩/偶发断"。官方《GMAC_RGMII_Delayline》《GMAC_Mode_Configuration》文档给了调法与判定。
网络性能与 DPDK
普通内核网络栈跑满千兆没问题,但要更高吞吐/更低时延(或要绕过协议栈做定制转发),用DPDK(external/dpdk/,RK 提供 GMAC DPDK 文档)。
- 性能排查
先用 iperf3 测内核栈吞吐、用官方性能分析看 CPU/中断/内存,确认瓶颈在哪(驱动中断、skb 分配、还是应用);
- DPDK
用户态轮询收包,绕开内核协议栈。常见问题:hugepage 没配、网卡没绑定到 DPDK(dpdk-devbind.py)、PMD 参数不对。官方 DPDK 文档(GMAC DPDK)给配置步骤。
PCIe 链路 / NVMe / 扩展卡
本板 &pcie0(2a200000,reset gpio4 RK_PB2,配combphy0_ps)走 DWC 控制器(CONFIG_PCIE_DW_ROCKCHIP=y)。RK3576 有 pcie0/pcie1 两个控制器,均为 PCIe Gen2 x1(RC only、内部时钟、支持 MMU、ASPM ALL),且每个控制器可分配 MSI/MSI-X 总数仅8 个(官方《PCIe 开发指南》1.6 / 2.4.4 / 11.8)。排障三步:Link 起没起 → 枚举到没 → 驱动绑定没。
板上排查(adb 直连):先看 Link 是否拉起——官方判据(12.2):出现"PCIe Link up"且LTSSM的bit16/17=0x3、bit0~8≥0x11(典型0x130011)才算成功;若反复 "PCIe Linking... LTSSM is 0xX" 则是 trainning 失败:
# 1) Link 拉起没有:看到 "PCIe Link up" 才算成功(判据见下) adb shell dmesg | grep -iE "pcie|pci" | head # 实测(NVMe 已接入): # rk-pcie 2a200000.pcie: PCIe Link up, LTSSM is 0x130011 # rk-pcie 2a200000.pcie: PCIe Gen.2 x1 link up # 2) 链路速率/宽度(官方 11.7:lspci -vvv 看 LinkSta;sysfs 更直接) adb shell lspci -vvv # 该设备段找 LinkSta: Speed 5GT/s, Width x1 adb shell cat /sys/bus/pci/devices/0000:01:00.0/current_link_speed /sys/bus/pci/devices/0000:01:00.0/current_link_widthLTSSM 停在 0x00(S_DETECT_QUIET,未检到外设端接)或 0x03(误入兼容性测试模式)都说明外设没工作/信号异常(状态码全表见官方 13.1 附录)。trainning 失败按官方顺序排查:reset-gpios 是否配对 → 外设 3V3 供电是否有/够不够 → 复位信号与电源时序是否与外设 spec 冲突 → 最后定位信号完整性(眼图)。
枚举与驱动绑定:lspci 看到 root port(bus 00)与其下游(bus 01)即枚举成功;lspci -k 看驱动、lsblk 看盘(认到 NVMe 盘 = 链路+枚举+驱动全通):
# 3) 枚举:lspci 应见 root port(00) + 下游设备(01) adb shell lspci # 实测:00:00.0 Rockchip 3576 / 01:00.0 Silicon Motion SM2263EN/SM2263XT (rev03) # 4) 驱动绑定:Kernel driver in use: nvme adb shell lspci -k adb shell lsblk # nvme0n1 = 认盘 = 全链路通 # 实测:nvme0n1 953.9G,已自动挂载带宽预期要放对:触觉智能Purple Pi OH2的PCIe是Gen2 x1,实测协商 5.0 GT/s,dmesg 会提示 "4.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x1 link"。NVMe 盘虽标称 Gen3 x4(dmesg "capable of 31.5 Gb/s"),实际只有 ~4 Gb/s(约500MB/s)上限——SSD 顺序读写落在400~500 MB/s 是正常的;若需高带宽需换Gen3平台(如RK3588的 pcie3x4/x2)。
现象 | 根因 | 处理 |
|---|---|---|
lspci 空 / dmesg 反复 "PCIe Linking... LTSSM is 0x0/0x3" | Link/trainning 失败(外设没上电、信号异常) | 查 reset-gpios → 3V3 供电 → 复位/电源时序 → 信号完整性(官方 12.2) |
枚举时报 "phy init failed / lock failed ... refclk and power supply" | dts 没开对应 phy,或 PHY 电源/输入时钟异常 | 查 dts combphy 节点 status 与供电(官方 12.1) |
Link up 但 lspci 只有 root port、无下一级 | 读下一级 vendor ID 非法(如 switch 固件加载慢) | 加打印确认非法 ID、按官方补丁/联系设备厂(官方 12.19) |
枚举成功但访问异常/概率性出错 | #PERST 复位时间不够 | dts 加 rockchip,perst-inactive-ms(官方 12.20) |
NVMe 长期工作后异常 | 供电/温升/固件等 | 对照官方 12.22 NVMe 专项排查 |
lspci 有设备但 lsblk 无盘 | NVMe 驱动没绑定/被占用 | lspci -k 看 driver |
在线更换/重扫(官方 11.13):设备损坏更换或 BAR 空间变化后,可对下游设备先 remove 再对整条总线重扫(本板 NVMe 实测路径 0000:01:00.0):
adb shell "echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove" # 先移除旧设备 adb shell "echo 1 > /sys/bus/pci/rescan" # 整条总线重扫 # 换盘后 lsblk 重新认到 nvme0n1 即成功网络与高速接口排障四级:PHY/物理先通(reset、MDIO、供电)→协商(ethtool/lspci 看速率与枚举)→数据面(delayline/驱动绑定)→性能(iperf3/DPDK)。RGMII的tx/rx delay与 PCIe的Link 状态是最常踩的两处。
RK3576板端实测记录
以下在触觉智能RK3576开发板-Purple Pi OH2+ Debian Bookworm上通过 adb直连执行,命令参考如下:
验证项 | 命令(adb shell …) | 实测结果 |
|---|---|---|
双千兆网口 | ip -br link | eth0(未插线 DOWN)/ eth1(UP,协商 100M) |
协商速率 | ethtool eth1 | Speed: 100Mb/s、Link detected: yes(对端/线缆决定) |
PCIe Link | dmesg | grep -i pcie | 接 NVMe 后:PCIe Link up, LTSSM is 0x130011, Gen.2 x1;此前无卡:Link Fail, LTSSM is 0x3 |
PCIe 枚举 | lspci | 00:00.0 Rockchip 3576 + 01:00.0 SM2263EN/SM2263XT NVMe |
NVMe 认盘 | lsblk;cat /sys/bus/pci/devices/0000:01:00.0/current_link_speed | nvme0n1 953.9G;链路 5.0 GT/s x1(盘能力 8.0 GT/s x4,被板限速) |
官方文档依据
docs/cn/Common/GMAC/Rockchip_Developer_Guide_Linux_GMAC_CN.pdfdocs/cn/Common/GMAC/Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdfdocs/cn/Common/GMAC/Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdfdocs/cn/Common/GMAC/Rockchip_Developer_Guide_Linux_GMAC_DPDK_CN.pdfdocs/cn/Linux/DPDK/Rockchip_Developer_Guide_Linux_DPDK_CN.pdfdocs/cn/Common/PCIe/Rockchip_Developer_Guide_PCIe_CN.pdfdocs/cn/Common/PCIe/Rockchip_Developer_Guide_PCIe_Performance_CN.pdf。
SDK 源码/配置依据
kernel-6.1/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c(rk3568_ops)kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7609-v1a.dtsi(gmac0/1 的 rgmii/tx_delay=0x1a/rx_delay=0x26/snps,reset、pcie0)kernel-6.1/arch/arm64/configs/rockchip_linux_rk3576_defconfig(CONFIG_PCIE_DW_ROCKCHIP=y、CONFIG_PCIE_ROCKCHIP_HOST=y)、external/dpdk/。
Purple Pi OH2开发板,是触觉智能RK3576核心板SOM7609系列配套的评估开发板,搭载4核A72+4核A53+M0多核异构处理器,主频2.2GHz,集成6Tops算力 NPU,轻松应对AI推理、边缘计算与轻量级AI端侧学习。配套完善SDK、丰富资料与Demo,有助于项目前期快速开发验证。