2、RK3588硬件平台基础

RK3588是瑞芯微推出的旗舰级八核应用处理器,采用三星8nm工艺制造,CPU部分为4×Cortex-A76(2.4GHz)+4×Cortex-A55(1.8GHz)的大小核架构,GPU为Mali-G610 MP4,NPU算力达6 TOPS。这颗芯片的特别之处在于其强大的异构计算能力和丰富的高速外设接口,使其在边缘计算、智能NVR、ARM PC、工业控制等领域都有广泛应用。对于uboot移植工作而言,理解芯片的内存映射、启动设备选择、时钟树和电源域管理是首要任务——uboot的本质就是"把硬件初始化到内核可以接管的状态",因此对硬件平台的熟悉程度直接决定了移植工作的效率和质量。

RK3588 启动流程与关键外设链路 BootROM 固化在芯片内部 TPL/SPL DDR初始化 时钟/存储控制器 U-Boot (BL33) 外设驱动/环境变量 引导内核 Linux Kernel 设备驱动/文件系统 启动设备选择 • eMMC (SDMMC0) • SD Card (SDMMC1) • SPI NOR/NAND Flash DDR 控制器 • 支持 LPDDR4/4x/5 • 32bit/64bit 总线 • 最高 4266Mbps 关键外设接口 • PCIe 3.0 x4 / SATA 3.0 • USB 3.1 Gen1 (Type-C) • 2× GbE MAC / HDMI 2.1 电源域管理 • VDD_CPU (0.75V~1.0V) • VDD_GPU (0.75V~1.0V) • VDD_LOGIC (0.8V~0.9V) • AVDD_2V8 / DVDD_1V2 时钟树 • 24MHz 晶振 (OSC) • PLL: CPLL/GPLL/NPLL • DDR: 独立 PLL • 外设时钟门控 原理图阅读要点 • 电源树/时序/去耦 • 启动配置电阻 (BOOT) • 时钟/复位信号 • 调试串口 (UART2) uboot移植核心关注点 DDR初始化参数 → 启动设备驱动 → 时钟/电源配置 → 网络/USB/显示驱动 → 环境变量与分区表

2.1 RK3588芯片架构概览

RK3588的内存映射和地址空间布局是uboot移植的第一份参考资料。芯片内部集成了丰富的外设控制器,每个控制器都映射到固定的物理地址范围。uboot的板级初始化代码(board_init)需要根据原理图配置对应的寄存器基地址和时钟门控。

模块说明uboot关注点
CPU簇4×A76 + 4×A55,支持CCI/CMN一致性总线多核启动(psci)、CPU频率调节
GPUMali-G610 MP4,支持Vulkan/OpenGL ES无需uboot驱动,但需保证供电和时钟
NPU6 TOPS算力,支持INT8/INT16无需uboot驱动,但需初始化电源域
内存控制器支持LPDDR4/4x/5,最大32GBDDR初始化参数(频率、时序、训练)
存储接口eMMC 5.1、SD 3.0、SPI NOR/NAND启动设备驱动、分区表
显示接口HDMI 2.1、DP 1.4、MIPI-DSI、eDP显示初始化(uboot logo)
网络2× GMAC(10/100/1000Mbps)网络驱动(TFTP下载内核)
高速外设PCIe 3.0 x4、SATA 3.0、USB 3.1PCIe枚举、USB host/device
在uboot移植初期,建议先屏蔽所有不必要的外设驱动,仅保留串口、DDR、eMMC/SD和网络驱动,确保最小系统能跑起来后再逐步添加其他功能。

2.2 关键外设详解

RK3588的外设控制器在uboot中的驱动代码主要位于drivers/目录下,包括mmc、net、usb、pci等子目录。每个外设的初始化顺序和依赖关系需要仔细梳理。

2.2.1 DDR内存

DDR初始化是uboot启动过程中最关键的步骤之一。RK3588的DDR控制器支持LPDDR4/4x/5,数据总线宽度为32bit或64bit,最高频率可达4266Mbps。在TPL阶段,uboot会执行DDR训练算法,根据板级配置的DDR颗粒型号和布线长度自动调整时序参数。

// 板级DDR配置示例 (rk3588-evb.dtsi)
&ddr_timing {
    clock-frequency = <2133000000>;  // DDR频率
    tRCD = <18>;
    tRP = <18>;
    tRAS = <42>;
    tRFC = <350>;
    tWR = <18>;
    tWTR = <6>;
};
DDR参数错误会导致系统无法启动或运行不稳定。在移植初期,建议使用瑞芯微提供的DDR工具(如DDR Stress Test)验证硬件稳定性,再固化参数到uboot中。

2.2.2 eMMC与SD卡

eMMC和SD卡是uboot的主要启动介质。RK3588的eMMC控制器支持HS400模式,SD控制器支持UHS-I SDR104。在uboot中,需要配置对应的GPIO(如SD卡检测脚、电源使能脚)和时钟频率。

  • eMMC:通常连接到SDHCI0控制器,数据线为8bit,需要配置mmc0节点。
  • SD卡:通常连接到SDHCI1控制器,数据线为4bit,需要配置mmc1节点。
  • 启动顺序:通过BOOT引脚的电平组合决定优先从哪个设备启动。

2.2.3 USB与PCIe

USB 3.1 Gen1(Type-C)和PCIe 3.0是RK3588的高速扩展接口。在uboot中,USB通常用于支持键盘、U盘等设备,PCIe则用于NVMe SSD或扩展网卡。

// USB控制器配置示例
&usb_host0_xhci {
    status = "okay";
    dr_mode = "host";
    maximum-speed = "high-speed";
};

// PCIe控制器配置示例
&pcie2x1l0 {
    reset-gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_HIGH>;
    status = "okay";
};

2.2.4 以太网

RK3588内置两个GMAC控制器,支持RGMII/RMII接口。在uboot中,网络驱动主要用于TFTP下载内核和设备树。需要配置PHY的复位GPIO、时钟源和MDIO总线地址。

2.2.5 显示接口

HDMI 2.1、DP 1.4、MIPI-DSI和eDP接口使得RK3588在显示方面非常灵活。uboot阶段通常只需要初始化HDMI或DP用于显示logo,需要配置对应的PHY和时钟。

2.3 开发板硬件资源与原理图阅读要点

以瑞芯微官方EVB为例,开发板集成了丰富的接口资源。阅读原理图时,建议按照以下顺序进行:

  1. 电源树:从DC输入开始,追踪每一路电源的转换路径(DC-DC/LDO),确认各电源域的电压值和上电时序。
  2. 启动配置:找到BOOT引脚相关的电阻配置,确认当前板卡的启动设备优先级。
  3. 时钟电路:确认24MHz主晶振、32.768kHz RTC晶振的连接,以及各PLL的参考时钟。
  4. 调试接口:找到UART2(调试串口)的TX/RX引脚,确认电平转换芯片的型号。
  5. 复位电路:确认全局复位(POR)和各个外设的复位信号连接。
在uboot移植过程中,调试串口是最重要的信息输出通道。建议在原理图阶段就确认UART2的引脚映射,并在uboot中提前配置好串口驱动。

2.4 启动流程概述

RK3588的启动流程分为四个阶段,每个阶段都有明确的职责和交接条件。

阶段存储位置主要任务交接条件
BootROM芯片内部ROM初始化SRAM、检测启动设备、加载TPLTPL加载到SRAM并跳转
TPLeMMC/SD/SPI初始化DDR、加载SPLSPL加载到DDR并跳转
SPLeMMC/SD/SPI初始化存储控制器、加载U-BootU-Boot加载到DDR并跳转
U-BootDDR初始化外设、加载内核和设备树跳转到内核入口

在uboot移植过程中,需要特别关注TPL和SPL的编译配置。TPL通常只包含DDR初始化和最基本的串口输出,SPL则负责加载完整的U-Boot。瑞芯微的构建系统会自动处理这些依赖关系。

一个常见的误区是试图在SPL阶段就初始化所有外设。实际上,SPL应该保持精简,只做必要的存储和时钟初始化,将复杂的外设驱动留给完整的U-Boot阶段。

2.5 实战场景:从零开始配置最小启动系统

假设我们拿到一块基于RK3588的自研板卡,需要完成uboot的最小系统移植。以下是具体步骤:

  1. 确认硬件配置:从原理图中提取DDR颗粒型号(如LPDDR4x 8GB)、eMMC型号(如三星KLUBG4G1CE)、PHY芯片型号(如RTL8211F)。
  2. 创建板级目录:在u-boot/board/rockchip/下创建myboard_rk3588目录,复制EVB的配置作为起点。
  3. 修改设备树:在arch/arm/dts/下创建rk3588-myboard.dts,修改内存节点、eMMC节点、网络节点和串口节点。
  4. 配置DDR参数:使用瑞芯微的DDR工具生成参数,填入rk3588-ddr-timing.dtsi。
  5. 编译验证:执行make myboard_rk3588_defconfig和make,生成uboot.img。
  6. 烧录测试:通过RKDevTool烧录到eMMC,观察串口输出,逐步排查问题。
在烧录测试前,务必确认DDR参数的正确性。错误的DDR配置可能导致芯片过热甚至损坏。建议先用瑞芯微的DDR测试固件验证硬件稳定性。

2.6 常见误区与总结

  • 误区一:忽略电源时序。RK3588对上电时序有严格要求,如果VDD_CPU先于VDD_LOGIC上电,可能导致芯片闩锁效应。
  • 误区二:DDR参数照搬EVB。不同板卡的PCB布线长度、层叠结构不同,DDR训练参数必须重新生成。
  • 误区三:SPL阶段初始化过多外设。SPL的代码大小受限于SRAM容量(RK3588的SRAM约192KB),应保持精简。
  • 误区四:忽略时钟树配置。外设的时钟门控和分频配置错误会导致外设无法工作,且难以排查。

总结而言,RK3588的uboot移植是一个系统工程,需要硬件、软件和系统知识的综合运用。建议在动手之前,先花时间完整阅读芯片手册中的内存映射、时钟树和电源管理章节,同时对照原理图逐一确认每个引脚的连接。只有对硬件平台有了深入理解,才能高效地完成uboot移植和后续的Buildroot集成工作。