本文依据 Vivado 2022.1 版本工具链的特性,对 UG1209( 最新版本为 2020.1 )中介绍的 USB BOOT 启动步骤做了修改,此外,介绍了 WINDOWS 10 中 DFU 工具的使用。
Step1 VIVADO 操作:
新建 VIVADO 工程 。
( 图片截自 UG1209,路径和工程名可自定,下同 )
新建 Block Design。
添加 Zynq UltraScale+ MPSoC IP,并使用 run block automation 应用 board preset。
需要注意的是,要在 board preset 的基础上减少外设的使用以防启动镜像过大,原因会在镜像制作阶段说明。这里去掉了 PCIE、SATA、DP、CAN 外设以及两个 AXI HPM FPD 接口。
完成配置后,依次进行 Validate Design, Create HDL wrapper, Generate Output Product (OOC) , Export Hardware。因为这里没有用到PL端,所以不用生成比特流。
Step 2 制作第一个启动镜像:
创建 FSBL 工程。
配置 FSBL,在 src 目录下找到 xfsbl_config.h,修改其中的宏定义如下:
修改完成后保存、编译。
打包 fsbl.elf 和 pmufw.elf,USB boot 的第一个启动镜像会被加载到 256KB OCM 中,为了满足 size 要求,第一个启动镜像只包含 fsbl.elf 和 pmufw.elf,如果使能过多外设会导致最终的 pmufw 过大。当 OCM 被写满时,USB 启动就会失败。打包方式如下图所示,注意 pwufw 的 partition type 要指定为 pmu(loaded by bootrom)。
Step 3 制作第二个启动镜像:
使用 Vivado 2022.1 版本的 ZCU102 BSP 创建 PETALINUX 2022.1 工程。
配置 PETALINUX 工程:
1.选中 Subsystem AUTO Hardware Settings, 选中 Memory Settings ,设置 System Memory Size 为 0x6FFFFFFF。
2.返回主菜单. 选择 Image Packaging Configuration, 设置 root file system type 为 INITRAMFS。
3.将 INITRAMFS/INITRD Image name 由默认的 petalinux-intramfs-image 为 petalinux-image-minimal,默认配置下ROOTFS 会放在 SD 卡的 EXT4 分区,这是 PETALINUX 2021.1之后版本的新特性,修改后 ROOTFS 在 DDR 中,就无需插 SD卡了。
4.返回主菜单,选择 ARM Trusted Firmware Configuration,配置如下:
默认情况下,ATF 运行在 COM 中,但是在本设计中 OCM 的空间非常紧张,ATF 在 OCM 运行可能会因为内存不足卡死,所以改为在 DDR 中运行,同时使能 atf debug 方便调试。
5.修改设备树:
编辑 ./project-spec/meta-user/recipes-bsp/device-tr ee/ files/system-user.dtsi 如下:
6.编译: petalinux-build
回到 Vitis IDE 制作启动镜像,如下图所示,注意 bl31.elf 的excpetion level=el3 并且使能 trust zone,system.dtb 的 load属性设为 0x00100000(在2021.1后u-boot.elf 不再包含system.dtb),u-boot.elf 的 exception level=el2。
详细的测试过程,请参考“如何使用 Vivado 2022.1 版本工具链实现 ZCU102 USB 启动(下)”
没有回复内容