Zynq MPSOC boot中遇到的几个问题及解决方法
文章目录
前言
在我们的FMCW(调频连续波)激光雷达项目中,使用了Xilinx的Zynq MPSOC—XCZU3EG作为主处理器,这是一款性能强悍的SOC,内嵌了:4核A53(应用处理单元),2核R5(实时处理单元),Mali-400图形处理单元,丰富的FPGA资源,以及PCIe, usb3.0等高速接口。
本文主要对开发过程中,XCZU3EG boot遇到的几个问题及解决方法予以描述。Zynq MPSOC系统的boot过程相当复杂,芯片的技术文档中有详细说明,boot的原理性内容这里不再赘述了。
一、MPSOC下BOOT.BIN的生成
XCZU3EG SOC的ARM内核Cortex A53是基于ARM V8,而ARM V8芯片架构在访问系统资源上做了许多安全性设计,即所谓的ATF(Arm Trusted Firmware),其中之一就是为软件定义了运行的权限:EL0–EL3(Exception Level),从0到3,软件执行的privilege从低到高,即:EL3级别最高,可以访问所有的硬件资源。缺省情况下,uboot、kernel及用户程序都是运行在EL1~EL2,它们要访问系统的寄存器等敏感资源时,不能直接访问,需要通过一层代理来完成,这个代理是硬件配合固件来实现的。因此,MPSOC的BOOT.BIN相比之前的zynq 7000的BOOT.BIN复杂度增加了不少。
BOOT.BIN仍然通过Xilinx的SDK工具生成。如下是一个典型的.bif文件内容:
//arch = zynqmp; split = false; format = BIN
the_ROM_image:
{
[fsbl_config]a53_x64
[bootloader]D:\share_ubuntu\gen_image\zynqmp_fsbl_2019.elf
[destination_cpu = a53-0, exception_level = el-2]D:\share_ubuntu\gen_image\bl31.elf
[pmufw_image]D:\share_ubuntu\gen_image\pmu_2019.elf
[destination_device = pl]D:\share_ubuntu\gen_image\design_1_wrapper.bit
[load = 0x7ff0000, destination_cpu = a53-0, exception_level = el-2]D:\share_ubuntu\gen_image\u-boot.dtb
[load = 0x8000000, destination_cpu = a53-0</