怎样租用个人网站空间兰州网络营销网站
2026/2/9 18:00:58 网站建设 项目流程
怎样租用个人网站空间,兰州网络营销网站,广州十大游戏公司,主题wordpressRK3588 U-Boot网络功能深度分析 本文档深入分析RK3588平台上U-Boot的网络功能实现,包括GMAC驱动、TFTP/NFS启动、网络命令以及MAC地址传递到Linux内核的机制。 目录 网络驱动架构概述 GMAC驱动实现 TFTP启动功能 NFS启动功能 网络命令实现 通过网络更新镜像分区 MAC地址传递到…RK3588 U-Boot网络功能深度分析本文档深入分析RK3588平台上U-Boot的网络功能实现,包括GMAC驱动、TFTP/NFS启动、网络命令以及MAC地址传递到Linux内核的机制。目录网络驱动架构概述GMAC驱动实现TFTP启动功能NFS启动功能网络命令实现通过网络更新镜像分区MAC地址传递到Linux Kernel关键文件路径索引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或内部集成PHYDMA引擎: 支持独立Tx/Rx描述符环形队列硬件特性:checksum offloadVLAN支持巨型帧支持多播过滤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() // 启动PHY2.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// 错误#

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询