news 2026/4/18 8:56:10

[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

RK3588 U-Boot网络功能深度分析

本文档深入分析RK3588平台上U-Boot的网络功能实现,包括GMAC驱动、TFTP/NFS启动、网络命令以及MAC地址传递到Linux内核的机制。


目录

  1. 网络驱动架构概述
  2. GMAC驱动实现
  3. TFTP启动功能
  4. NFS启动功能
  5. 网络命令实现
  6. 通过网络更新镜像分区
  7. MAC地址传递到Linux Kernel
  8. 关键文件路径索引

1. 网络驱动架构概述

1.1 整体架构

┌─────────────────────────────────────────────────────────────┐ │ U-Boot网络栈 │ ├─────────────────────────────────────────────────────────────┤ │ 网络命令层 (cmd/net.c) │ │ - tftp, nfs, ping, dhcp, bootp, rarpboot, cdp, sntp, dns │ ├─────────────────────────────────────────────────────────────┤ │ 协议层 (net/) │ │ - tftp.c, nfs.c, bootp.c, arp.c, ping.c, dns.c │ ├─────────────────────────────────────────────────────────────┤ │ 网络核心层 (net/net.c, eth-uclass.c) │ │ - 设备管理, 数据包收发, 环境变量管理 │ ├─────────────────────────────────────────────────────────────┤ │ 驱动层 (drivers/net/) │ │ - gmac_rockchip.c (平台驱动) │ │ - dwc_eth_qos.c (DWC ETH QoS驱动) │ │ - phy/, designware.c (PHY和MAC驱动) │ ├─────────────────────────────────────────────────────────────┤ │ 硬件层 │ │ - RK3588 GMAC (Synopsys DWC ETH QoS IP) │ │ - External PHY (Realtek/Broadcom/Marvell) │ └─────────────────────────────────────────────────────────────┘

1.2 RK3588网络特性

RK3588芯片集成了两个千兆以太网MAC控制器(GMAC0和GMAC1),具有以下特性:

  • IP核心: Synopsys DesignWare Cores Ethernet MAC (DWC ETH QoS)
  • 接口类型: RGMII (千兆), RMII (百兆)
  • PHY支持: 外部PHY或内部集成PHY
  • DMA引擎: 支持独立Tx/Rx描述符环形队列
  • 硬件特性:
    • checksum offload
    • VLAN支持
    • 巨型帧支持
    • 多播过滤
    • Magic Packet唤醒

2. GMAC驱动实现

2.1 驱动文件结构

文件说明
drivers/net/gmac_rockchip.cRockchip GMAC平台驱动 (2305行)
drivers/net/dwc_eth_qos.cDWC ETH QoS核心驱动 (2239行)
drivers/net/dwc_eth_qos.hDWC ETH QoS头文件
drivers/net/phy/PHY驱动目录
drivers/net/phy/rk630phy.cRK630专用PHY驱动

2.2 关键数据结构

// 文件: drivers/net/gmac_rockchip.c/* Rockchip以太网设备私有数据 */structrockchip_eth_dev{structeqos_priveqos;// DWC ETH QoS私有数据intphy_interface;// PHY接口类型};/* GMAC平台数据 */structgmac_rockchip_platdata{structeth_pdataeth_pdata;// 以太网平台数据structreset_ctlphy_reset;// PHY复位控制bool integrated_phy;// 集成PHY标志bool clock_input;// 时钟输入方向intphy_interface;// PHY接口模式inttx_delay;// TX延迟配置intrx_delay;// RX延迟配置intbus_id;// 总线ID (用于多GMAC)};

2.3 RK3588专用操作函数集

// 文件: drivers/net/gmac_rockchip.c:2095conststructrk_gmac_opsrk3588_gmac_ops={.fix_mac_speed=rk3588_set_rgmii_speed,// 速度适配.set_to_rgmii=rk3588_set_to_rgmii,// 配置RGMII接口.set_to_rmii=rk3588_set_to_rmii,// 配置RMII接口.set_clock_selection=rk3588_set_clock_selection,// 时钟选择};

2.4 设备树兼容性

// 文件: drivers/net/gmac_rockchip.c:2102staticconststructudevice_idgmac_rockchip_ids[]={{.compatible="rockchip,rk3588-gmac",.data=(ulong)&rk3588_gmac_ops},{}};

2.5 RK3588 GRF寄存器配置

RK3588通过GRF (General Register Files) 来配置GMAC接口和时钟:

// 文件: arch/arm/include/asm/arch-rockchip/grf_rk3588.h/* PHP GRF - GMAC接口控制 */structrk3588_php_grf{uint32_tgmac_con0;// GMAC接口模式控制uint32_tclk_con1;// GMAC时钟控制// ...};/* SYS GRF - GMAC延迟配置 */structrk3588_sys_grf{uint32_tsoc_con7;// GMAC TX/RX延迟使能uint32_tsoc_con8;// GMAC0延迟配置uint32_tsoc_con9;// GMAC1延迟配置// ...};

2.6 驱动初始化流程

gmac_rockchip_probe() │ ├─> ofnode_phy_interface() // 获取PHY接口类型 ├─> dev_read_u32_array(tx_delay) // 读取TX延迟配置 ├─> dev_read_u32_array(rx_delay) // 读取RX延迟配置 │ ├─> eqos_probe() // DWC ETH QoS初始化 │ ├─> eqos_probe_resources() // 获取资源(CSR/PHY/MDIO/时钟/复位) │ ├─> clk_set_rate() // 设置125MHz(RGMII)或50MHz(RMII) │ └─> eqos_start_clks() // 启动时钟 │ ├─> rk3588_set_to_rgmii/rmii() // 配置接口模式 │ ├─> rk_gmac_set_to_rgmii() // GRF寄存器配置 │ └─> rk3588_set_clock_selection() // 时钟选择配置 │ └─> eqos_init() // DMA描述符初始化 ├─> eqos_write_hwaddr() // 写入MAC地址 └─> phy_startup() // 启动PHY

2.7 RGMII速度适配

// 文件: drivers/net/gmac_rockchip.c:1594staticvoidrk3588_set_rgmii_speed(structgmac_rockchip_platdata*pdata,intspeed){structrk3588_php_grf*php_grf=pdata->php_grf;u32 val=0;switch(speed){caseSPEED_10:// 10Mbps: clk-125分频val=RK3588_GMAC_CLK_RX_DIV150|RK3588_GMAC_CLK_TX_DIV150;break;caseSPEED_100:// 100Mbps: clk-25分频val=RK3588_GMAC_CLK_RX_DIV30|RK3588_GMAC_CLK_TX_DIV30;break;caseSPEED_1000:// 1000Mbps: 不分频val=RK3588_GMAC_CLK_RX_DIV1|RK3588_GMAC_CLK_TX_DIV1;break;}// 写入GRF寄存器rk_clrsetreg(&php_grf->clk_con1,RK3588_GMAC_CLK_RX_DIV_MASK|RK3588_GMAC_CLK_TX_DIV_MASK,val);}

2.8 MAC地址配置

// 文件: drivers/net/gmac_rockchip.c:2029staticintgmac_rockchip_eth_write_hwaddr(structudevice*dev){structrockchip_eth_dev*priv=dev_get_priv(dev);// 根据配置选择底层驱动if(priv->eqos.config->ops->eqos_write_hwaddr)returneqos_write_hwaddr(dev);elsereturndesignware_eth_write_hwaddr(dev);}// DWC ETH QoS MAC地址写入实现// 文件: drivers/net/dwc_eth_qos.c:1083inteqos_write_hwaddr(structudevice*dev){structeqos_priv*eqos=dev_get_priv(dev);structeth_pdata*plat=dev_get_platdata(dev);u8*mac_id=plat->enetaddr;// 写入MAC地址高32位寄存器writel((mac_id[0]<<8)|mac_id[1],&eqos->mac_regs->address0_high);// 写入MAC地址低32位寄存器writel((mac_id[2]<<24)|(mac_id[3]<<16)|(mac_id[4]<<8)|mac_id[5],&eqos->mac_regs->address0_low);return0;}

3. TFTP启动功能

3.1 TFTP协议实现

文件位置:net/tftp.c(984行)

3.2 TFTP状态机

// 文件: net/tftp.c#defineSTATE_SEND_RRQ1// 发送读请求#defineSTATE_RECV_WRQ6// 接收写请求(服务器模式)#defineSTATE_SEND_WRQ7// 发送写请求#defineSTATE_DATA2// 数据传输状态#defineSTATE_TOO_LARGE3// 文件过大#defineSTATE_BAD_MAGIC4// 魔数错误#defineSTATE_OACK5// 选项确认/* TFTP操作码 */#defineTFTP_RRQ1// 读请求#defineTFTP_WRQ2// 写请求#defineTFTP_DATA3// 数据包#defineTFTP_ACK4// 确认#defineTFTP_ERROR5// 错误#
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 20:11:23

国内用户专属福利:PyTorch-CUDA-v2.7镜像阿里云加速源

国内用户专属福利&#xff1a;PyTorch-CUDA-v2.7镜像阿里云加速源 在深度学习项目启动的前48小时&#xff0c;有多少开发者真正用在了写代码上&#xff1f;恐怕大部分时间都花在了环境配置——安装 PyTorch、匹配 CUDA 版本、调试 cuDNN 兼容性……尤其是当你面对一个全新的服务…

作者头像 李华
网站建设 2026/4/18 6:42:58

Docker镜像源优化技巧:如何高效拉取PyTorch-CUDA-v2.7镜像?

Docker镜像源优化技巧&#xff1a;如何高效拉取PyTorch-CUDA-v2.7镜像&#xff1f; 在深度学习项目启动阶段&#xff0c;最让人焦灼的场景之一莫过于&#xff1a;刚配置好开发环境&#xff0c;执行 docker pull pytorch/pytorch:2.7-cuda11.8-devel 后&#xff0c;下载速度卡在…

作者头像 李华
网站建设 2026/4/18 6:41:49

Anaconda配置PyTorch环境太慢?试试PyTorch-CUDA-v2.7镜像加速方案

PyTorch-CUDA-v2.7 镜像&#xff1a;告别 Anaconda 慢速配置&#xff0c;一键启动 GPU 开发环境 在深度学习项目中&#xff0c;你是否经历过这样的场景&#xff1f;——刚拿到一台新服务器&#xff0c;兴致勃勃准备跑通第一个模型&#xff0c;结果卡在环境配置上整整一上午&…

作者头像 李华
网站建设 2026/4/18 6:38:30

9款AI论文工具实测:巨鲸写作1天搞定文献综述+真实文献引用

一、实测结论&#xff1a;9款AI论文工具核心能力对比&#xff08;2024最新版&#xff09; 作为常年帮学弟学妹改论文的“过来人”&#xff0c;我深知科研党最痛的3个问题&#xff1a;文献综述写得慢、引用格式乱、AI生成内容被导师一眼看穿。这次我花了7天时间&#xff0c;把市…

作者头像 李华
网站建设 2026/4/18 6:43:46

PyTorch-CUDA-v2.7镜像下载统计数据:年度报告摘要

PyTorch-CUDA-v2.7 镜像&#xff1a;构建高效深度学习开发环境的技术实践 在人工智能研发日益工业化和标准化的今天&#xff0c;一个稳定、可复现、开箱即用的开发环境&#xff0c;往往比模型本身更能决定项目的成败。尤其是在团队协作、远程实验或云上训练场景中&#xff0c;“…

作者头像 李华
网站建设 2026/4/17 13:47:36

无需繁琐配置!PyTorch-CUDA-v2.7镜像助你秒启AI训练

无需繁琐配置&#xff01;PyTorch-CUDA-v2.7镜像助你秒启AI训练 在深度学习项目启动的前夜&#xff0c;你是否曾因环境问题彻夜难眠&#xff1f;明明代码写完了&#xff0c;却卡在“CUDA not available”的报错上&#xff1b;团队协作时&#xff0c;同事说“我这边能跑”&…

作者头像 李华