如何使用2022.1版本工具链实现ZCU102 USB启动(上)

作者:Zhao Gaofeng,AMD 赛灵思开发者

Description:本文依据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端,所以不用生成比特流。

Step2 制作第一个启动镜像

创建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)。

Step3 制作第二个启动镜像

使用2022.1版本的ZCU102 BSP创建PETALINUX 2022.1 工程

petalinux-create -t project -s
-n zcu102_usb_plnx
cd zcu102_usb_plnx
petalinux-config --get-hw-description=
edt_zcu102_wrapper.xsa>

配置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 如下:
/include/ "system-conf.dtsi"
/ {
gpio-keys { sw19 {
status = "disabled";
};
};
};
&uart1 {
status = "disabled";
};
&dwc3_0 {
dr_mode = "peripheral"; maximum-speed = "super-speed";
};

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。


详细的测试过程,请参考下篇。

最新文章