RK3568-ANDROID11双以太网配置实战:从设备树到网络优化
1. RK3568双以太网配置入门指南刚拿到RK3568开发板时我发现这个芯片原生支持双千兆以太网口这对于需要多网口应用的场景简直太方便了。但在Android11系统上配置双网口特别是RGMII接口的调试确实踩了不少坑。今天我就把从设备树配置到网络优化的完整过程分享给大家。RK3568的两个GMAC控制器都支持RGMII接口可以同时连接两个PHY芯片。在实际项目中我常用的是GMAC0和GMAC1这两个接口分别对应开发板上的两个RJ45网口。配置过程主要涉及设备树修改、时钟设置、复位时序调整和延迟参数优化这几个关键步骤。如果你是第一次接触RK3568的网络配置建议先准备好以下环境编译好的Android11源码RK3568开发板我用的是EVB1-DDR4-V10版本串口调试工具网线和网络测试设备2. 设备树(DTS)配置详解2.1 GMAC0基础配置打开内核设备树文件通常是rk3568-evb1-ddr4-v10.dtsi找到gmac0节点。这个节点定义了第一个以太网控制器的所有硬件参数。我常用的配置如下gmac0 { phy-mode rgmii; clock_in_out output; snps,reset-gpio gpio1 RK_PB0 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 20000 100000; assigned-clocks cru SCLK_GMAC0_RX_TX, cru SCLK_GMAC0; assigned-clock-parents cru SCLK_GMAC0_RGMII_SPEED, cru CLK_MAC0_2TOP; assigned-clock-rates 0, 125000000; pinctrl-names default; pinctrl-0 gmac0_miim gmac0_tx_bus2 gmac0_rx_bus2 gmac0_rgmii_clk gmac0_rgmii_bus; tx_delay 0x3c; rx_delay 0x2f; phy-handle rgmii_phy0; status okay; };这里有几个关键参数需要注意phy-mode必须设为rgmii这是RK3568最常用的接口模式reset-delays-us这个参数控制PHY芯片的复位时序实测发现RTL8211F需要20ms复位时间和100ms稳定时间tx_delay/rx_delay这两个值直接影响信号质量后面会专门讲解如何优化2.2 GMAC1配置要点GMAC1的配置与GMAC0类似但要注意引脚复用和时钟源的差异gmac1 { phy-mode rgmii; clock_in_out output; snps,reset-gpio gpio1 RK_PB1 GPIO_ACTIVE_LOW; snps,reset-active-low; snps,reset-delays-us 0 20000 100000; assigned-clocks cru SCLK_GMAC1_RX_TX, cru SCLK_GMAC1; assigned-clock-parents cru SCLK_GMAC1_RGMII_SPEED, cru CLK_MAC1_2TOP; assigned-clock-rates 0, 125000000; pinctrl-names default; pinctrl-0 gmac1m1_miim gmac1m1_tx_bus2 gmac1m1_rx_bus2 gmac1m1_rgmii_clk gmac1m1_rgmii_bus; tx_delay 0x4f; rx_delay 0x26; phy-handle rgmii_phy1; status okay; };特别注意GMAC1使用的GPIO复位引脚是RK_PB1不是GMAC0的RK_PB0pinctrl-0引用的引脚组名称不同gmac1m1_前缀时钟源也变成了SCLK_GMAC1系列2.3 PHY芯片配置RK3568通常通过MDIO总线连接PHY芯片需要在设备树中配置mdio节点mdio0 { rgmii_phy0: phy0 { compatible ethernet-phy-ieee802.3-c22; reg 0x0; }; }; mdio1 { rgmii_phy1: phy0 { compatible ethernet-phy-ieee802.3-c22; reg 0x0; }; };这里有个坑要注意有些PHY芯片的兼容性字符串可能不同比如RTL8211F需要使用ethernet-phy-id001c.c916。3. 关键参数调试技巧3.1 复位时序优化复位时序对网络稳定性影响很大snps,reset-delays-us这个参数包含三个时间值第一个值0复位信号拉低前的延迟第二个值20000复位信号保持低电平的时间第三个值100000复位完成后到开始操作的等待时间根据我的实测经验对于RTL8211F PHY建议保持20ms复位和100ms稳定时间如果使用其他PHY芯片需要查阅具体规格书调整3.2 延迟线参数调整tx_delay和rx_delay是RGMII接口最关键的参数直接影响信号采样时机。这两个值的范围是0-0x7F对应不同的延迟量。调试技巧先用默认值如tx_delay0x3crx_delay0x2f测试如果出现丢包或连接不稳定可以以5为步长调整使用ping大包测试稳定性如ping -s 8000我在不同板子上实测过的稳定值开发板型号tx_delayrx_delayPHY型号EVB1-V100x3c0x2fRTL8211FCore-35680x400x2aKSZ9031NanoPi-R4S0x350x30RTL8211F3.3 时钟配置检查时钟配置错误会导致网络完全无法工作需要确认assigned-clock-parents指向正确的时钟源assigned-clock-rates设置正确的频率125MHz for RGMIIclock_in_out方向正确RK3568通常设为output可以通过以下命令检查时钟是否正常cat /sys/kernel/debug/clk/clk_summary | grep gmac4. Android系统网络配置4.1 内核驱动确认编译内核时需要确保以下配置已开启CONFIG_ROCKCHIP_GMACy CONFIG_RK_GMAC_NETy CONFIG_RK_GMAC_ETHy启动后检查驱动是否加载成功dmesg | grep gmac正常应该看到类似输出gmac0: PHY ID 001cc916 at 0 IRQ POLL (rgmii-id) gmac1: PHY ID 001cc916 at 1 IRQ POLL (rgmii-id)4.2 Android网络服务配置在Android11上需要修改以下文件配置双网口在init.rc中添加服务service eth0 /system/bin/netcfg eth0 up class main oneshot service eth1 /system/bin/netcfg eth1 up class main oneshot修改framework配置!-- in frameworks/base/core/res/res/values/config.xml -- bool nameconfig_ethernet_interfaces_share_profilesfalse/bool string-array nameconfig_ethernet_interfaces translatablefalse itemeth0/item itemeth1/item /string-array4.3 网络优先级调整双网口同时使用时可能需要调整网络优先级。可以通过修改路由metric实现ip route add default via 192.168.1.1 dev eth0 metric 100 ip route add default via 192.168.2.1 dev eth1 metric 2005. 常见问题排查5.1 网络连接不稳定症状时断时续ping丢包严重 排查步骤检查延迟线参数tx/rx_delay测量RGMII信号质量需要示波器确认PCB走线符合阻抗控制要求5.2 PHY芯片未被识别症状ifconfig看不到eth接口 排查步骤检查MDIO总线是否正常dmesg | grep mdio确认PHY地址和兼容字符串正确测量PHY芯片供电和复位信号5.3 双网口无法同时工作症状只有一个网口能正常工作 排查步骤检查设备树中两个GMAC的status都是okay确认时钟资源不冲突检查PCB设计是否满足双RGMII的布线要求6. 性能优化建议经过多次实测我总结出几个提升RK3568网络性能的技巧启用GRO/GSO功能ethtool -K eth0 gro on ethtool -K eth0 gso on调整接收队列大小ethtool -G eth0 rx 4096使用DMA优化 在设备树中添加gmac0 { snps,force_thresh_dma_mode; snps,multicast-filter-bins 256; };中断亲和性设置对于多核CPUecho 2 /proc/irq/$(cat /proc/interrupts | grep eth0 | awk {print $1} | sed s/://)/smp_affinity最后提醒大家不同硬件设计可能需要不同的参数配置建议先参考官方开发指南再根据实际硬件调试。Rockchip提供的《Rockchip_Developer_Guide_Ethernet_CN.pdf》文档中有更详细的技术细节遇到问题时可以重点查阅第3章关于RGMII接口调试的内容。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2426413.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!