手把手教你用JTAG仿真器启动ZynqMP的U-Boot(Vivado 2020.1环境,含PMU-FW报错解决)

张开发
2026/4/18 18:02:04 15 分钟阅读

分享文章

手把手教你用JTAG仿真器启动ZynqMP的U-Boot(Vivado 2020.1环境,含PMU-FW报错解决)
深度解析JTAG仿真器启动ZynqMP U-Boot全流程与PMU-FW报错实战解决方案当一块全新的ZynqMP开发板摆在你面前却没有SD卡接口只能依赖JTAG仿真器进行启动时很多工程师会在初始阶段就遇到PMU-FW is not running的拦路虎。这种情况在硬件原型验证阶段尤为常见本文将彻底拆解这个过程中的技术难点提供一套经过实战验证的解决方案。1. 问题背景与技术挑战Zynq UltraScale MPSoC作为Xilinx旗舰级嵌入式平台其启动流程相比传统ARM架构更为复杂。在没有SD卡等常规启动介质的情况下通过JTAG仿真器直接引导系统需要深入理解芯片的底层初始化机制。核心痛点分析PMUPlatform Management Unit作为ZynqMP的看门人必须在A53核心启动前完成初始化官方文档Answer 67157提供的标准流程在某些硬件配置下会导致PMU-FW无法正常加载JTAG模式下PMU寄存器默认不可见需要特定操作解锁访问权限典型错误场景再现# 按照常规流程加载FSBL后出现的错误提示 PMU-FW is not running, certain applications may not be supported这个报错直接导致后续启动流程中断使得开发者无法继续加载ATF和U-Boot。问题的根源在于PMU子系统未被正确初始化和激活。2. 环境准备与工具链配置2.1 硬件要求Xilinx Zynq UltraScale MPSoC开发板如ZCU102USB-JTAG仿真器如Xilinx Platform Cable USB II串口调试终端推荐使用Tera Term或Minicom2.2 软件版本组件版本要求备注Vivado2020.1必须包含SDK组件PetaLinux2020.1与Vivado版本匹配XSDB2020.1随Vivado安装2.3 必备文件准备确保工作目录包含以下编译生成的ELF文件zynqmp_fsbl.elf第一阶段启动加载器pmufw.elfPMU固件bl31.elfARM可信固件u-boot.elfU-Boot引导程序提示这些文件通常位于PetaLinux工程目录的images/linux子目录下或通过Vivado SDK编译生成。3. 关键步骤深度解析3.1 JTAG连接与PMU访问解锁常规XSDB操作流程的缺陷在于直接尝试加载FSBL而忽略了PMU的初始化前提。以下是经过改良的关键操作序列# 启动XSDB交互环境 xsdb # 建立JTAG连接 connect targets # 重点解锁PMU访问权限 targets -set -filter {name ~ PSU} mwr 0xffca0038 0x1ff targets技术内幕0xffca0038是PMU全局控制寄存器地址0x1ff的写入操作会解除PMU子系统的访问限制这个步骤在官方文档UG1209中有提及但在Answer 67157中被忽略3.2 PMU固件加载与运行成功解锁后可以安全地加载PMU固件# 定位PMU核心 targets -set -filter {name ~ MicroBlaze PMU} targets # 加载并运行PMU固件 dow pmufw.elf con执行效果验证成功加载后调试串口会显示PMU初始化日志系统状态寄存器将显示PMU进入运行状态为后续FSBL加载创造了必要条件3.3 完整启动链执行按照ZynqMP的标准启动顺序逐步加载各阶段组件# 加载FSBL targets -set -filter {name ~ Cortex-A53 #0} rst -processor dow zynqmp_fsbl.elf con stop # 加载ATFARM Trusted Firmware dow bl31.elf con stop # 加载U-Boot dow u-boot.elf con关键观察点FSBL加载后串口应显示DDR初始化成功信息ATF阶段会输出安全监控相关的调试信息U-Boot最终会显示熟悉的命令行提示符4. 常见问题与高级调试技巧4.1 典型错误排查表错误现象可能原因解决方案PMU固件加载失败JTAG连接不稳定检查线缆连接重启调试器FSBL卡死DDR参数不匹配确认vivado工程中的内存配置U-Boot无法启动ATF版本不兼容使用PetaLinux配套的bl31.elf4.2 XSDB高级调试命令# 查看处理器状态 targets -state # 读取内存内容 mrd 0xffca0038 # 设置断点 stopat -addr 0x000000004.3 性能优化建议在xsdb启动时添加-jtagfrequency参数提高JTAG时钟频率使用-quiet参数减少调试输出加快命令执行对于频繁操作可将命令序列写入.tcl脚本批量执行5. 工程实践中的经验分享在实际项目开发中我们发现几个值得注意的现象电源时序影响有时PMU初始化失败是由于开发板供电不稳导致建议在JTAG连接前确保所有电源轨稳定固件版本匹配混合使用不同版本的PMUFW和FSBL可能导致难以诊断的异常务必保持所有组件来自同一工具链版本JTAG模式配置部分开发板需要物理跳线设置为JTAG启动模式仅软件设置可能不够环境变量干扰错误的LIBRARY_PATH或LD_LIBRARY_PATH设置可能导致XSDB行为异常建议在干净环境中运行# 推荐的环境设置方式 unset LIBRARY_PATH unset LD_LIBRARY_PATH source /tools/Xilinx/Vivado/2020.1/settings64.sh对于需要频繁烧录不同固件的场景可以将完整操作流程封装为Makefile目标flash-uboot: xsdb -eval source flash_uboot.tcl其中flash_uboot.tcl包含所有必要的XSDB命令序列。这种自动化方式特别适合CI/CD流水线中的固件测试环节。

更多文章