4.3.15. 以太网驱动调试指南
4.3.15.1. 概述
在
MAC(Medium Access Control)是
MAC的
地址
管理:在 数据 链路层,MAC负责 为 每个 网络设备 分配 一个 唯一 的 MAC 地址,用以 在 网络 中 标识 不同 的 设备。 帧封装
和解 封装:MAC 层 负责 将 上层 协议 传输 的 数据 封装 成帧(Frame)。在 接收端,它 还 会解 封装数据。 流量
控制:通过 控制数据 的 发送 速率,避免 网络 拥塞,确保 网络 的 稳定 运行。 冲突
避免:在 共享 信道 中,MAC 协议 还 需要 解决 数据 发送 冲突 的 问题。例如,在 以太网 中 使用 CSMA/CD 协议 来 检测 和 避免 数据 冲突。 传输
顺序 管理:确保 数据 按 正确 的 顺序 传输,防止 丢包 和 重复。
PHY(Physical Layer)是
PHY的
信号
编码 与 解码:PHY 层 将 数字 数据 转换 为 适合 在 物理介质 上 传输 的 信号 格式。接收 方会 对 信号 进行 解码,恢复 原始 的 比特流。 比特
传输:PHY 层 负责 将 数据 按 比特 的 形式 发送 出去。 调制
与 解调:在 无线通信 中,PHY 层 还 包括 调制 和 解调 的 过程,即将 数字信号 转化 为 适合 无线电波 传输 的 形式,并 在 接收端 进行 反向 操作。 信道
管理:PHY 层 还 负责 物理 信道 的 选择、管理 和 监控,包括 信号强度、信号 噪声 比(SNR)等 参数,以 优化 通信 质量。
名词解释
| 名词 | 说明 |
|---|---|
| MAC | Medium Access Control,介质 |
| PHY | Port Physical Layer,物理层 |
| MII | Media Independent Interface,一种 |
| RMII | Reduced Media Independent Interface,简化版 |
| GMII | Gigabit Media Independent Interface,用于 |
| RGMII | Reduced Gigabit Media Independent Interface,对 |
| MDIO | Management Data Input/Output,在 MAC 和 PHY 之间 |
4.3.15.2. 特点
X5 支持 MAC 10/100/1000M 以太网
支持
全双工 和 半双工 操作 模式 支持
通过 RGMII 接口 实现 10/100/1000 Mbps 数据 传输速率 支持
通过 RMII 接口 实现 10/100 Mbps 数据 传输速率 符合 IEEE 802.3-2015 以太网 MAC 标准,支持
时间 敏感 网络(TSN)流量 符合 IEEE 1588-2008 标准,用于
精准 的 网络 时钟 同步 支持 TCP/UDP 卸载
功能,以 减少 CPU 负载
4.3.15.3. 功能描述
典型应用
典型

功能原理
MII(媒体
RMII
MII 接口
RMII 的
引
脚数 减少:与 标准 MII 接口 相比。RMII 的 数据线 仅 需要2bit,大大减少 了 连接 的 复杂度 和 所 需引 脚数,从而 降低 了 芯片 和 电路板 的 成本。 数据
传输速率:RMII支持 10Mbps 和 100Mbps 的 以太网 传输速率。 时钟
频率:RMII接口 使用 更 高频率 的 时钟 来 驱动 数据传输。与 MII 相比,RMII 的 时钟 频率 通常 为50 MHz,这 意味着 数据传输 是 基于 每 时钟 周期 传输 两位 数据。
RMII 引脚
| 管脚 | 描述 | 方向 |
|---|---|---|
| REF_CLK | 发送 |
参考 |
| TXD[0:1] | 发送数据 |
MAC -> PHY |
| RXD[0:1] | 接收数据 |
PHY -> MAC |
| TXEN | 发送 |
MAC -> PHY |
| RXER | 接收 |
PHY -> MAC |
| CRS/CRS_DV | 载波 |
PHY -> MAC |
RGMII
RGMII(Reduced Gigabit Media Independent Interface)是
RGMII 的
引
脚数 减少:与 传统 的 GMII 接口 相比,RGMII 通过 简化 设计 减少 了 引脚 数量 支持
千兆 以太网:RGMII 能够 支持 1Gbps 的 以太网 速率 时钟
频率:RGMII 使用125 MHz的 时钟 频率 来 传输数据
RGMII 引脚
| 管脚 | 描述 | 方向 |
|---|---|---|
| TXC | 发送 |
MAC -> PHY |
| TXD[0:3] | 发送数据 |
MAC -> PHY |
| TXCTL | 发送 |
MAC -> PHY |
| RXC | 接收 |
PHY -> MAC |
| RXD[0:3] | 接收数据 |
PHY -> MAC |
| RXCTL | 接收 |
PHY -> MAC |
MDIO
MDIO(Management Data Input/Output)是
MDIO 主要
链路
状态 监测:可以 用来 读取 PHY 的 链路 状态,判断 物理 链路 是否 正常、是否 已经 建立 连接。 速率
和 双工 模式 配置:通过 MDIO 接口,MAC 可以 设置 PHY 的 工作 速率(如10/100/1000Mbps)和 双工 模式(全双工 或 半双工)。 自
协商 功能:MDIO 可以 用于 启动 或 读取PHY的 自 协商 过程,这 允许 设备 根据 网络 条件 自动 选择 最佳 的 工作 速率 和 模式。 故障诊断:MDIO 可
用于 诊断 PHY 的 工作 状态,例如 读取 错误 计数、诊断 信息 等。
4.3.15.4. 驱动代码
uboot 驱动说明
注意: uboot 目前
uboot 设备树
X5 uboot 设备树uboot/arch/arm/dts,用户x5-soc.dtsi 为例。MAC 与 PHY 相关x5_soc_ethernet_tsn。如下
x5_soc_ethernet_tsn: gmac-tsn@35010000 {
compatible = "horizon,sunrise5-dwmac";
status = "okay";
reg = <0x35010000 0x10000>;
reg-names = "stmmaceth";
clock-names = "stmmaceth",
"mac-clk-tx",
"mac-clk-rx",
"ethstp",
"syscfg-clk";
clocks = <&refclk>,
<&refclk>,
<&refclk>,
<&refclk>,
<&refclk>;
phy-mode = "rgmii-id";
phy-handle = <&x5_soc_ethphy0>;
max-speed = <1000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet &pinctrl_lsio_gpio0_31_output_normal>;
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
x5_soc_ethphy0: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
max-frequency = <125000000>;
};
};
};
x5_soc_ethernet_tsn 节点
status: GMAC 驱动使能 状态,需 确保 值为 okayphy-mode: PHY 工作模式,uboot 目前 仅 支持 RGMII max-speed: PHY 工作速率,RGMII 对应 1000Mbps pinctrl-0: 管脚复用,此处 使用 示例 &pinctrl_enet: 复用为 RGMII 功能 管脚 &pinctrl_lsio_gpio0_31_output_normal: PHY 复位管脚,此处 使用 lsio_gpio0_31,用户以 实际 使用 为准
x5_soc_ethphy0 节点
reg: PHY 地址,0表示使用 广播 发送,非0表示 对应 PHY 地址 max-frequency: PHY 时钟,RGMII 使用 125M 时钟
uboot 驱动源码
uboot GMAC 驱动uboot/drivers/net/dwc_eth_qos.c
新增新的 PHY 厂商驱动的典型方法
本new phy,用户
在 uboot 中
添加 厂商 驱动 源码
uboot PHY 厂商uboot/drivers/net/phy 目录new_phy.c 放置
修改 Makefile 修改
uboot/drivers/net/phy/Makefile,添加new phy源码的 编译 项。
obj-$(CONFIG_NEW_PHY) += new_phy.o
注意: 需CONFIG_NEW_PHY=y
在 PHY 框架
初始化 过程 中,增加 对 厂商 new_phy驱动的 入口 调用。 修改 uboot 源码 uboot/drivers/net/phy/phy.c,添加new phy的初始化 函数。
int phy_init(void)
{
...(省略代码)...
#ifdef CONFIG_NEW_PHY
phy_new_phy_init(); // 添加厂商 new phy 的初始化函数,该函数由 new_phy.c 实现
#endif
...(省略代码)...
}
new_phy.c 将
/* Support for NEW PHY */
static struct phy_driver new_phy_driver = {
.name = "new phy",
.uid = 0x12ABCD, // 对应 new phy 的网卡 PHY ID,注意: 需要 PHY ID 匹配后才会调用对应的驱动函数
.mask = 0xffffff, // PHY ID 掩码,注意: PHY ID = uid & mask
.features = PHY_GBIT_FEATURES,
.probe = &new_phy_probe,
.config = &new_phy_config,
.startup = &new_phy_startup,
.shutdown = &new_phy_shutdown,
};
int new_phy_init(void)
{
phy_register(&new_phy_driver);
return 0;
}
kernel 驱动说明
注意: kernel 目前
kernel 设备树
X5 kernel 设备树kernel/arch/arm64/boot/dts/hobot,用户x5-evb.dtsi 为例。
MAC 与 PHY 相关gmac_tsn hobot_tsn horizon_tsn,分别
注意: 用户horizon_tsn,使用 RMII 推荐gmac_tsn。并且ref-clock-direction 属性。该
下面horizon_tsn 为例
horizon_tsn: horizon_tsn@35010000 {
compatible = "snps,dwc-qos-ethernet-5.10a";
status = "disabled";
reg = <0x35010000 0x10000>,
<0x35050000 0x4>;
interrupt-parent = <&gic>;
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "mac-irq";
clocks = <&hpsclks X5_HSIO_ENET_AXI_CLK>,
<&hpsclks X5_HSIO_ENET_RGMII_CLK>,
<&hpsclks X5_HSIO_ENET_PCLK>,
<&hpsclks X5_HSIO_ENET_REF_CLK>,
<&hpsclks X5_HSIO_ENET_PTP_REFCLK>;
clock-names = "axi_clk", "rgmii_clk", "apb_clk",
"ref_clk", "ptp_ref";
resets = <&socrst HSIO_ENET_RESET>;
reset-names = "enet_rst";
snps,write-requests = <8>;
snps,read-requests = <8>;
snps,txpbl = <4>;
snps,rxpbl = <4>;
snps,clk_csr = <2>;
snps,tso;
snps,aal;
//snps,fp;
snps,force_sf_dma_mode = <1>;
phy-mode = "rgmii-id";
phy-handle = <&horizon_ethphy0>;
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
horizon_ethphy0: horizon_ethernet-phy@1 {
compatible =
"ethernet-phy-ieee802.3-c22";
reg = <0>;
};
};
}
&horizon_tsn {
status = "disabled";
phy-mode = "rgmii-id"; // PHY 工作模式为 RGMII
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet &hsio_gpio0_16>; // 配置复用功能: RGMII 和 复位管脚
phyreset-gpio = <&hs_gpio0_porta 16 GPIO_ACTIVE_HIGH>; // 配置复位管脚,此处使用 hsio_gpio0_16
};
horizon_tsn 节点
status: GMAC 驱动使能 状态,需 确保 要 使用 的 节点,其 status值为okayphy-mode: PHY 工作模式,目前 支持 rmiirgmii-idpinctrl-0: 管脚复用,此处 使用 示例 &pinctrl_enet: 复用为 RGMII 功能 管脚,若 使用 RMII,需 复用 为 pinctrl_enet_rmii&hsio_gpio0_16: PHY 复位管脚,此处 使用 hsio_gpio0_16,用户以 实际 使用 为准
phyreset-gpio: 复位管脚,此处 使用 hsio_gpio0_16
x5_soc_ethphy0 节点
reg: PHY 地址,0表示使用 广播 发送,非0表示 对应 PHY 地址
注意: PHY 复位
在RMII模式ref-clock-direction属性。
ref-clock-direction = "tx";参考时钟 由MAC提供,时钟 方向 为MAC->PHY。 ref-clock-direction = "rx";参考时钟 由PHY提供,时钟 方向 为PHY->MAC。
下面gmac_tsn 为例
&gmac_tsn {
status = "disabled";
phy-mode = "rmii"; //RMII模式
ref-clock-direction = "tx"; //参考时钟方向:MAC->PHY
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet_rmii &lsio_gpio0_31>; //RMII管脚复用
phyreset-gpio = <&ls_gpio0_porta 31 GPIO_ACTIVE_HIGH>;
};
gmac_tsn 节点
status: GMAC 驱动使能 状态,需 确保 要 使用 的 节点,其 status值为okayphy-mode: PHY工作模式 为 rmiiref-clock-direction: 参考时钟 方向 配置,需要 根据 硬件 设计 配置 为 tx或者rxpinctrl-0: 管脚复用,此处 使用 示例 &pinctrl_enet_rmii: RMII模式下 需要 复用 为 pinctrl_enet_rmii&lsio_gpio0_31: PHY 复位管脚,此处 使用 lsio_gpio0_31,用户以 实际 使用 为准
phyreset-gpio: 复位管脚,此处 使用 lsio_gpio0_31
kernel 驱动源码
kernel GMAC 驱动kernel/drivers/net/ethernet/stmicro/stmmac
开启 PHY 驱动
PHY 驱动kernel/drivers/net/phy 目录,包含

匹配 PHY ID
以 realtek 为例, struct phy_driver 数组
static struct phy_driver realtek_drvs[] = {
{
// ...(省略代码)...
{
PHY_ID_MATCH_EXACT(0x001cc916), // PHY ID,可通过 datasheet 获取,驱动通过读取 register 2 和 3 获取
.name = "RTL8211F Gigabit Ethernet", // 驱动名称
.probe = rtl821x_probe,
.config_init = &rtl8211f_config_init,
.read_status = rtlgen_read_status,
.config_intr = &rtl8211f_config_intr,
.handle_interrupt = rtl8211f_handle_interrupt,
.suspend = genphy_suspend,
.resume = rtl821x_resume,
.read_page = rtl821x_read_page,
.write_page = rtl821x_write_page,
},
// ...(省略代码)...
}
当
[ 5.684946] hobot_gmac 35010000.horizon_tsn eth0: PHY [hobot-mac-mdio-35010000:00] driver [RTL8211F Gigabit Ethernet] (irq=POLL)
[ 5.705015] hobot_gmac 35010000.horizon_tsn eth0: mac_config_rx_queues_routing, not support packet mode :
[ 5.714742] hobot_gmac 35010000.horizon_tsn eth0: configuring for phy/rgmii-id link mode
PHY 驱动匹配检查
kernel 可
查看/sys/bus/mdio_bus/drivers下,以
root@buildroot:/sys/bus/mdio_bus/drivers# ls -al
total 0
drwxr-xr-x 24 root root 0 Jan 1 00:00 .
drwxr-xr-x 4 root root 0 Jan 1 00:00 ..
drwxr-xr-x 2 root root 0 Jan 1 00:00 'Generic Clause 45 PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'Generic FE-GE Realtek PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'Generic PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8201CP Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8201F Fast Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8208 Fast Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211 Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211B Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211C Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211DN Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211E Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211F Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8211F-VD Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8221B-VB-CG 2.5Gbps PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8221B-VM-CG 2.5Gbps PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8226 2.5Gbps PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8226-CG 2.5Gbps PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8226B-CG_RTL8221B-CG 2.5Gbps PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8226B_RTL8221B 2.5Gbps PHY'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8365MB-VC Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL8366RB Gigabit Ethernet'
drwxr-xr-x 2 root root 0 Jan 1 00:00 'RTL9000AA_RTL9000AN Ethernet'
查看
X5 系统 GMAC 驱动/sys/bus/mdio_bus/devices/hobot-mac-mdio-35010000:00,同样driver 目录
root@buildroot:/sys/bus/mdio_bus/devices/hobot-mac-mdio-35010000:00# ls
attached_dev driver of_node phy_dev_flags phy_has_fixups phy_id phy_interface power statistics subsystem uevent
root@buildroot:/sys/bus/mdio_bus/devices/hobot-mac-mdio-35010000:00# ls -al driver/hobot-mac-mdio-35010000\:00/driver
lrwxrwxrwx 1 root root 0 Jan 1 00:04 driver/hobot-mac-mdio-35010000:00/driver -> '../../../../../../../../bus/mdio_bus/drivers/RTL8211F Gigabit Ethernet'
可/sys/bus/mdio_bus/drivers/RTL8211F Gigabit Ethernet 表示
4.3.15.5. 使用方法
uboot 使用方法
uboot 设置静态 IP
设置 X5 uboot 为
Hobot>setenv ipaddr 192.168.1.10
uboot 动态获取 IP
将 X5 网口dhcp 命令
Hobot>setenv serverip 192.168.1.1
Hobot>setenv autoload no
Hobot>dhcp
uboot 验证 PHY 连通性
uboot下
Hobot>setenv ipaddr 192.168.1.10
Hobot>ping 192.168.1.11
gmac-tsn@35010000 Waiting for PHY auto negotiation to complete..... done
Using gmac-tsn@35010000 device
host 192.168.1.11 is alive
如果host 192.168.1.11 is alive 则
uboot 读写 phy 寄存器
在 uboot 下mii 命令集
查看
Hobot>mii device
MII devices: 'gmac-tsn@35010000'
Current device: 'gmac-tsn@35010000'
可以gmac-tsn@35010000
查看 PHY 寄存器
格式 mii dump <addr> <reg>,参数
addr: PHY 地址reg: 寄存器地址,仅 支持[0:5]
注意: 推荐
例如:读取
Hobot>mii dump 1 0
0. (1040) -- PHY control register --
(8000:0000) 0.15 = 0 reset
(4000:0000) 0.14 = 0 loopback
(2040:0040) 0. 6,13 = b10 speed selection = 1000 Mbps
(1000:1000) 0.12 = 1 A/N enable
(0800:0000) 0.11 = 0 power-down
(0400:0000) 0.10 = 0 isolate
(0200:0000) 0. 9 = 0 restart A/N
(0100:0000) 0. 8 = 0 duplex = half
(0080:0000) 0. 7 = 0 collision test enable
(003f:0000) 0. 5- 0 = 0 (reserved)
读取 PHY 寄存器
格式 mii read <addr> <reg>
注意: 可以
例如:读取
Hobot>mii read 1 0
1040
kernel 使用方法
设置 IP 参数
Linux 网卡/etc/network/interfaces 配置 IP 参数
设置静态 IP
设置 eth0 静态 IP 可
auto eth0
iface eth0 inet static # 设置 eth0 为静态 IP
address 192.168.1.10 # 设置静态 IP 地址
netmask 255.255.255.0 # 设置子网掩码
gateway 192.168.1.1 # 设置网关地址
broadcast 192.168.1.255 # 设置广播地址
metric 700 # 设置 metric 值
设置动态 IP
设置 eth0 通过 hdcp 动态
auto eth0
iface eth0 inet dhcp
系统常用命令
查看网卡状态
ls /sys/class/net
每个/sys/class/net 目录
常用
| 参数 |
描述 |
|---|---|
| address | MAC地址 |
| broadcast | 广播 |
| carrier | 物理 |
| carrier_changes | 记录 |
| dev_id | 用于 |
| duplex | 显示full 表示half 表示 |
| mtu | 最大 |
| speed | 网卡 |
| tx_queue_len | 网卡 |
| statistics | 网络接口 |
打开/关闭 eth0
ifconfig eth0 up # 打开 eth0
ifconfig eth0 down # 关闭 eth0
配置 eth0 参数
ifconfig eth0 192.168.1.10 # 配置静态 IP
ifconfig eth0 hw ether 00:11:22:aa:bb:cc # 设置 MAC 地址
ifconfig eth0 netmask 255.255.255.0 # 设置子网掩码
route add default gw 192.168.1.1 # 添加网关
ethtool
ethtool 用于
查看网卡状态
下面
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Full # 当前网卡支持的能力
100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: Yes # 支持自动协商
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Full # 广播的连接模式
100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes # 自动协商开启
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 1000Mb/s # 当前网卡速率
Duplex: Full # 网卡工作模式
Port: Twisted Pair
PHYAD: 0 # PHY 地址
Transceiver: external
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: ug
Wake-on: d
Link detected: yes
网卡统计信息
ethtool -S eth0 显示
接收
rx_packets:接收
到 的 数据包 总数。 rx_bytes:接收
到 的 字节 总数。 rx_errors:接收
过程 中 发生 的 错误 数量。例如,CRC 错误、帧 错误 等。 rx_dropped:接收
到 的 数据包 被 丢弃 的 数量。可能 因为 缓冲区 溢出 或 其他 原因 导致 数据包 丢失。 rx_fifo_errors:接收
队列 溢出 错误 的 数量。表示 接收 FIFO 队列 已满,数据包 无法 处理。 rx_length_errors:接收
数据包 的 长度 错误(如 超出 最大 长度)的 数量。 rx_crc_errors:接收
过程 中 的CRC错误 数。表示 数据包 在 传输 过程 中 发生 了 数据 损坏。
发送
tx_packets:发送
的 数据包 总数。 tx_bytes:发送
的 字节 总数。 tx_errors:发送
过程 中 发生 的 错误 数量。例如,校验 和 错误、设备 错误 等。 tx_dropped:发送
的 数据包 被 丢弃 的 数量。通常 发生 在 网络 拥堵 或 设备 资源 不足 时。 tx_fifo_errors:发送
队列 溢出 错误 的 数量。表示 发送 FIFO 队列 已满,数据包 无法 传送。 tx_collisions:发生
的 碰撞 次数(在 以太网 中,只有 在 半双工 模式 下 可能 出现)。 tx_carrier_errors:发生
的 载波 错误 数量,通常 与 链路层 的 物理 连接 问题 有关。
设置网卡速率与工作模式
设置
ethtool -s eth0 speed 1000 duplex full autoneg off
网卡速率测试
uboot 没有
注意: 测试
下面
设置
网卡 速率 为 1000Mbps,并 启用 全双工
ethtool -s eth0 speed 1000 duplex full autoneg off
PC 端
启动 iperf3,作为 server 等待 板端 连接
> .\iperf3.exe -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
板端
作为 client 进行 速率 测试
# iperf3 -p 5201 -c 192.168.1.11
Connecting to host 192.168.1.11, port 5201
[ 5] local 192.168.1.10 port 52942 connected to 192.168.1.11 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 114 MBytes 956 Mbits/sec 0 345 KBytes
[ 5] 1.00-2.00 sec 113 MBytes 950 Mbits/sec 0 345 KBytes
[ 5] 2.00-3.00 sec 113 MBytes 947 Mbits/sec 0 345 KBytes
[ 5] 3.00-4.00 sec 113 MBytes 949 Mbits/sec 0 345 KBytes
[ 5] 4.00-5.00 sec 113 MBytes 950 Mbits/sec 0 345 KBytes
[ 5] 5.00-6.00 sec 113 MBytes 949 Mbits/sec 0 345 KBytes
[ 5] 6.00-7.00 sec 113 MBytes 950 Mbits/sec 0 345 KBytes
[ 5] 7.00-8.00 sec 113 MBytes 951 Mbits/sec 0 345 KBytes
[ 5] 8.00-9.00 sec 113 MBytes 947 Mbits/sec 0 345 KBytes
可以
注意: 其他
4.3.15.6. 常见问题
网卡问题速查
与 PHY 相关

加载网卡提示 “Cannot attach to PHY”
错误信息
root@ubuntu:~# ifconfig eth0 up
[ 222.582785] dwc-eth-dwmac 35010000.gmac-tsn eth0: __stmmac_open: Cannot attach to PHY (error: -19)
SIOCSIFFLAGS: No such device
网卡 MDIO 通信
网卡
供电 是否 正常 复位
管脚 是否 复用 成 GPIO,复位 时序 是否 满足 datasheet 要求,一般 PHY 要求 复位 管脚 拉低 一定 时 长 才 是 有效 复位 MDIO 通信
是否 异常,例如 是否 有 波形,MDC 速率 是否 满足要求(一般 不 超过2.5M)
MAC 复位失败”
uboot 下
EQOS_DMA_MODE_SWR stuck
Kernel 在 link up 网卡
原因
检查
是否 有 参考 时钟,时钟 频率、幅值 是否 满足要求 检查 PHY 供电
是否 正常,检查 PHY 复位 管脚 检查 PHY datasheet,是否
特殊 寄存器 配置,例如 在 给出 RGMII-RX 时钟 前 需要 进行 必要 的 寄存器 配置
自协商失败”
分析方法
通过
交叉 对比,判断 是 本地 还是 对端 问题 uboot 下
协商 失败,可以 尝试 延长 timeout 看 是否 改善 ethtool eth0查看板端 和 对 端的 PHY 协商 能力 是否 与 期望 的 一致,是否 板端 或者 对端 限制 了 自 协商
uboot / kernel 无法 ping 通
使用
第三方 设备、线缆 进行 交叉 验证,排除 对端 或者 线缆 问题,最好 是 直连 测试,不要 通过 路由器 或 交换机 检查 uboot 是否
正确 设置 了 ipaddr,确保和 对 端 在 同一 网段,同时 避免 IP 地址 冲突 检查 kernel 是否
正确 设置 了 ip、子网掩码,确保 和 对 端 在 同一 网段,同时 避免 IP 地址 冲突 对端
进行 抓包 分析 如果
收到 板端 发出 的 ARP 包,但是 对端 没有 回 ARP包,需 检查 IP 冲突 问题 如果 ARP 包
交互 正常,可以 收到 ICMP 包,但是 没有 回复 ICMP 包,需 排查 对 端网络 配置 策略。例如 确保 windows 防火墙 关闭,是否 开启 ICMP 入站 规则 等等。

丢包严重或者大量收发报错
分析方法
眼图
测试 信号 质量 是否 满足要求。 确认 PHY 是否
使能 了 clock delay。 测量
时钟 是否 稳定。 ethtool -S eth0 | grep crc可以统计 由于 CRC 错误 而 丢弃 的 包,如果 该值 随着 时间 大量 增加,大 概率 是 信号 完整性 问题。