作者: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 配置PETALINUX工程 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,配置如下:
cd zcu102_usb_plnx
petalinux-config --get-hw-description=
1.选中Subsystem AUTO Hardware Settings, 选中 Memory Settings ,设置 System Memory Size 为 0x6FFFFFFF.
默认情况下,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。
详细的测试过程,请参考下篇。