MPSoC 启动流程详解
MPSoC 的系统启动由平台管理单元 (PMU) 和配置安全单元 (CSU) 协同完成,分为预配置、配置和后配置三个阶段。
预配置阶段 上电后,PMU 首先唤醒并执行内部固化的 ROM 代码。这一阶段完全由 PMU 控制,负责初始化基础环境:清零 LPD/FPD 寄存器及内存,检测关键区域电压,启动必要的 PLL 生成时钟,并复位 CSU、APU 等核心模块。当所有初始化完成后,PMU 释放 CSU 复位信号,自身转入后台服务模式,监控系统电源状态。
配置阶段 CSU 被唤醒后执行 BootROM 代码,这是系统的硬件信任根。它读取 MODE 引脚确定启动设备(如 SD、QSPI Flash),搜索黄金镜像(BOOT.BIN)。CSU 解析引导头,根据安全模式加载 FSBL 到 OCM 中,同时将 PMU 固件加载到 PMU RAM 以增强电源管理能力。在安全启动模式下,CSU 还会验证 PPK 完整性、检查密钥撤销列表、利用 PUF 生成唯一密钥,并对镜像进行签名认证和解密。
后配置阶段 FSBL 接管控制权后,负责初始化 DDR 控制器、外设,若包含 PL 比特流则进行 FPGA 配置。随后加载 ATF、U-Boot 等后续引导程序,建立完整的软件信任链,最终将控制权移交给操作系统或用户应用。
启动镜像文件组成
一个完整的 MPSoC 启动包通常包含以下关键文件,顺序不可错乱:
- PMU Firmware (pmufw.elf):上电第一个执行的固件,负责初始化 PS 核心电源域、系统时钟及复位逻辑,是系统稳定运行的前提。
- FSBL (fsbl.elf):第一阶段引导加载程序,初始化 DDR、UART 等外设,加载并验证后续镜像,配置 PL 比特流,传递启动参数给 ATF。
- ATF (bl31.elf):ARM Trusted Firmware,运行在 EL3 级别,负责安全世界与非安全世界的隔离,管理中断及安全监控调用,验证 U-Boot 签名。
- U-Boot (u-boot.ub):第二阶段引导加载程序,进一步初始化网络、存储设备,从介质读取 Linux 内核及 DTB,配置启动参数,支持命令行交互或自动启动。
- Device Tree Blob (system.dtb):描述硬件拓扑的二进制文件,向内核提供 CPU 核数、DDR 地址、外设基址等信息,使内核无需修改源码即可适配硬件。
- Linux Kernel (Image/zImage):操作系统核心,管理进程调度、内存及文件系统,挂载根文件系统,启动 init 进程。
- Root File System (rootfs):用户空间根目录,包含系统库、工具及应用程序,通过 init 进程自动启动业务应用。
- BOOT.BIN:由 bootgen 工具打包的单一镜像,整合上述底层文件,简化启动流程并支持安全校验。
基于 TCP 协议的远程 OTA 更新
远程更新 QSPI Flash 的核心在于通过网络协议将 BOOT.bin 传输至开发板,写入 Flash 后校验并重启。
通信模型 采用客户/服务器模型,MPSOC 开发板作为服务端开启 TCP 监听,上位机作为客户端发送文件。为防止网络误关闭导致更新失败,建议采用显式命令机制:客户端传完文件后发送'update'命令触发写入;若需取消,可发送'clear'命令清除暂存数据;'erase'命令用于擦除 Flash 旧程序。
实现步骤
- 使用 lwIP 协议栈开启 TCP 服务。
- 接收端将文件暂存于 DDR。
- 收到更新命令后,调用函数将数据写入 QSPI Flash。
- 写入完成后读出数据进行校验,确保无误。
- 校验成功则重新配置启动源为 QSPI Flash 并重启。
Xilinx 7 系列高级配置主题
配置文件格式与生成
BitGen 工具可将布局布线后的 NCD 文件转换为配置文件。不同格式适用于不同场景:
- .bit:二进制,含头部信息,用于 JTAG 下载调试。
- .bin:纯二进制裸数据,无头部,适合嵌入式处理器加载。
- .mcs:行业标准 PROM 格式,含地址校验和,用于烧录 SPI/NOR Flash 实现上电自加载。


