最近的工作学习内容需要用到zcu106开发板以及cameralink相机,需要用到嵌入式系统,然后发现Vitis是官方提供的最新的集成式开发平台,就准备用这个来学习一下。
关于编译zcu106的嵌入式系统的原理及非离线环境下的流程,可以详见博主GaleZhang的这两篇博客(一)(二),已经介绍的很清楚了。我这里主要说一下离线环境下的整个过程和我遇到的一些坑。
计算机操作系统:Ubuntu18.04.4
软件版本(链接是官方下载,除Vitis-AI外都需要一个能够有下载权限的Xilinx账号才能下载):
Vitis2020.1
Petalinux2020.1
Xilinx Runtime2020.1
Vitis-AI1.2.1
第一步:离线安装Vitis2020.1
这一步出现的问题很少,从官网下载离线安装包解压后,运行Ubuntu的用于安装的可执行文件即可。只要Ubuntu版本符合Vitis的需要,就可以顺利安装(PS:如果只是想要编译Zcu106的嵌入式平台而不需要自己改变PL的话,是不需要license的)。
第二步:离线安装Petalinux2020.1及其依赖
离线安装Petalinux,需要在官网下载4个文件,包括Petalinux安装包、嵌入式系统需要用到的预编译数据包,适用于Zcu106的aarch64预编译数据包、以及适用于zynqmp嵌入式系统的通用镜像数据包。
在安装前,首先需要给petalinux配置安装环境,根据数据手册c_ug1144-petalinux-tools-reference-guide的要求,需要的工具库有dos2unix、ip、gawk、gcc、g++、make、netstat、ncurses-dev、tftp server、zlib-dev、openssl-dev、flex、bison、libselinux、gnupg、wget、diffstat、chrpath、socat、xterm、autoconf、libtool、tar、unzip、texinfo、zlib1g-dev、gcc-multilib、build-essential、screen、pax、gzip、libstdc++。在互联网环境下可以直接根据运行petalinux的安装文件出现的报错来逐步安装需要的工具包,在离线环境下就需要提前下载好工具包之后来离线安装了。这几天会逐步提供我自己在互联网环境下下载的Ubuntu18.04.4环境下的相关工具包的deb文件,用dpkg指令打包安装即可。
安装完工具包后,还需用一些指令进行tftp server的环境配置才能完成整个安装环境。
gedit /etc/inetd.conf
#在文件中增加以下内容
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftproot
#保存并退出
mkdir /tftproot
chmod 777 /tftproot
/etc/init.d/openbsd-inetd restart
netstat -an | more | grep udp
#看到有如下输出,即表示tftp配置成功
udp 0 0 0.0.0.0:69 0.0.0.0:*
随后运行Petalinux安装程序,安装完毕后,将其他三个数据包解压放置到任意地方均可,以备后用。
第三步:离线安装Xilinx Runtime2020.1
官方提供该工具的deb安装包,用dpkg指令安装即可。
第四步:使用前三步安装的工具编译Zcu106的硬件平台.xpfm文件
1.使用vivado生成硬件平台.xsa文件
下载github的Zcu106 platform源码并解压,cd到其中的zcu106_base文件夹下运行
make xsa
即可在目录下生成.xsa文件。这一步只要Ubuntu系统支持vitis,就不会有奇怪的报错。
2.使用petalinux生成软件环境
在zcu106_base文件夹中的petalinux文件夹内,修改makefile文件。将petalinux-package指令的-fpga参数修改为上一步在vivado文件夹内生成的.bit文件的路径。此外,在petalinux文件夹内运行指令petalinux-config,根据官方文件的要求,将之前下载并解压的嵌入式系统需要用到的预编译数据包以及适用于Zcu106的aarch64预编译数据包的地址填写到对应位置中。
- Setting sstate cache
1) Extract the downloaded tar contents of sstate-cache at any location
2) run petalinux-config
-> Yocto Settings
->Local sstate feeds settings
->local sstate feeds url
(press Enter)
3) Provide the path of sstate-cache from above
Ex: /<path>/aarch64 for Versal projects
4) Save the configurations to use the sstate-cache
Setting download mirror
1) Extract the downloaded tar contents of downloads at any location
2) run petalinux-config
-> Yocto Settings
-> Add pre-mirror url
-> (press Enter)
Clear default value
3) Provide the path of downloads from above
file://<path>/downloads for all projects
随后回到zcu106_base文件夹执行:
Make petalinux_proj XSA_DIR=<xsa dir path>
Make pfm XSA_DIR=<xsa dir path>
其中参数自行替换为上一步生成的.xsa文件的路径。编译完成后就得到了我们需要的.xpfm平台文件。
第五步:使用Vitis-AI编译适用于Zcu106的嵌入式系统以及SD卡的烧写
这一步在博客中已经介绍的十分清楚,我按照该博文的流程只出现了一个报错,大概就是在进行vivado综合的过程中,发现板卡上的RAM资源不足,所以无法进行综合。
ERROR: [VPL UTLZ-1] Resource utilization: RAMB18 and RAMB36/FIFO over-utilized in Top Level
Design (This design requires more RAMB18 and RAMB36/FIFO cells than are available in the target
device. This design requires 1036 of such cell types but only 624 compatible sites are
available in the target device. Please analyze your synthesis results and constraints to
ensure the design is mapped to Xilinx primitives as expected. If so, please consider targeting
a larger device.)
\`define URAM_DISABLE 修改为
\`define URAM_ENABLE
\`define RAM_USAGE_LOW 修改为
\`define RAM_USAGE_HIGH
修改完后,再按照博文的流程即可顺利编译,过程大概3小时左右(自行根据前面的安装以及编译目录修改为正确的路径即可)。
cd ./DPU-TRD/prj/Vitis
export TRD_HOME =<Vitis AI path>/DPU-TRD
source <vitis install path>/Vitis/2020.1/settings64.sh
source opt/xilinx/xrt/setup.sh
export EDGE_COMMON_SW=<mpsoc common system>/xilinx-zynqmp-common-v2020.1
export SDX_PLATFORM=<zcu106 base platform path>/xilinx_zcu106_base_202010_1/xilinx_zcu106_base_202010_1.xpfm
make KERNEL=DPU_SM DEVICE=zcu106
随后烧写到SD卡上,就完成了基于Vitis-AI的Zcu106嵌入式系统的离线编译。