ZCU106 XRT PetaLinux工程分析【Xilinx Vitis】

1 前言
在ZCU106 XRT环境搭建【Xilinx Vitis】中针对我本地的环境,以及ZCU106的需求,生成了最终使用的PetaLinux工程。

PetaLinux工程的创建、编译都是使用脚本peta_build.sh 来完成的。这篇文章分析一下我本地的不同于ZCU102、ZCU104的区别。

2 工程配置
在config.sh文件中可以针对不同硬件平台进行额外的配置。peta_build.sh在运行中会优先选择运行config.sh中的功能,而不运行自己的功能。下面进行分析。

2.1 UBOOT
函数:config_peta
# The first argument is the petalinux configure file
# config_peta
/project-spec/configs/config
#
config_peta()
{
PETA_CONFIG_FILE=$1
echo "CONFIG_YOCTO_ENABLE_DEBUG_TWEAKS=y" >> $PETA_CONFIG_FILE
echo "CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL=\"~/Xilinx/PetaLinux/sstate_aarch64_2019.2/aarch64\"" >> $PETA_CONFIG_FILE
echo "CONFIG_PRE_MIRROR_URL=\"file://~/Xilinx/PetaLinux/downloads\"" >> $PETA_CONFIG_FILE
}

CONFIG_YOCTO_ENABLE_DEBUG_TWEAKS 默认就有的配置,用于跳过用户名输入流程
CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL 用于设置本地sstate目录地址
CONFIG_PRE_MIRROR_URL 用于设置sstate对应donwload目录地址

设置以上配置的目的是避免每次编译petalinux工程时从网站去下载第三方库,而是优先使用本地的相关库。

2.2 ROOTFS
函数:config_rootfs,rootfs_menu

# The first argument is the rootfs configure file
# config_rootfs project-spec/configs/rootfs_config
#
config_rootfs()
{
ROOTFS_CONFIG_FILE=$1
echo 'CONFIG_xrt=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_mnt-sd=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_xrt-dev=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_zocl=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_opencl-headers-dev=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_opencl-clhpp-dev=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_packagegroup-petalinux-opencv=y' >> $ROOTFS_CONFIG_FILE

echo 'CONFIG_gstreamer-vcu-examples=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_gstreamer-vcu-notebooks=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_packagegroup-petalinux-v4lutils=y' >> $ROOTFS_CONFIG_FILE
echo 'CONFIG_gst-shark=y' >> $ROOTFS_CONFIG_FILE
}
# The first argument is the rootfsconfig file
# rootfs_menu conf/user-rootfsconfig
#
rootfs_menu()
{
ROOTFSCONFIG=$1
echo 'CONFIG_xrt' >> $ROOTFSCONFIG
echo 'CONFIG_mnt-sd' >> $ROOTFSCONFIG
echo 'CONFIG_xrt-dev' >> $ROOTFSCONFIG
echo 'CONFIG_zocl' >> $ROOTFSCONFIG
echo 'CONFIG_opencl-clhpp-dev' >> $ROOTFSCONFIG
echo 'CONFIG_opencl-headers-dev' >> $ROOTFSCONFIG
echo 'CONFIG_packagegroup-petalinux-opencv' >> $ROOTFSCONFIG

echo 'CONFIG_gstreamer-vcu-examples' >> $ROOTFSCONFIG
echo 'CONFIG_gstreamer-vcu-notebooks' >> $ROOTFSCONFIG
echo 'CONFIG_packagegroup-petalinux-v4lutils' >> $ROOTFSCONFIG
echo 'CONFIG_gst-shark' >> $ROOTFSCONFIG
}

mnt-sd 是给ROOTFS添加了一个自动加载SD卡的脚本
xrt, xrt-dev, zocl, opencl-headers-dev, opencl-clhpp-dev 这些都用于将XRT的相关功能集成到PetaLinux的设置。注意其中的zocl是针对与MPSOC的配置
packagegroup-petalinux-opencv 是将OpenCV的相关功能集成到文件系统的配置
gstreamer-vcu-examples,gstreamer-vcu-notebooks,gst-shark 是VCU和gstreamer的相关配置
packagegroup-petalinux-v4lutils 是V4L2驱动的相关配置,用于处理视频

2.3 DEVICE-TREE
函数:config_dts

# The first argument is the rootfs configure file
# config_dts recipes-bsp/device-tree/files/system-user.dtsi
#
config_dts()
{
DTS_FILE=$1
#GLOB_DTS=${XRT_REPO_DIR}/src/runtime_src/core/edge/fragments/xlnk_dts_fragment_mpsoc.dts
#echo "cat ${XRT_REPO_DIR}/src/runtime_src/core/edge/fragments/xlnk_dts_fragment_mpsoc.dts >> recipes-bsp/device-tree/files/system-user.dtsi"
#cat ${XRT_REPO_DIR}/src/runtime_src/core/edge/fragments/xlnk_dts_fragment_mpsoc.dts >> recipes-bsp/device-tree/files/system-user.dtsi
echo "cat ${THIS_CONFIG_SCRIPT_DIR}/zcu106vcu_base_fragment.dts >> $DTS_FILE"
cat ${THIS_CONFIG_SCRIPT_DIR}/zcu106vcu_base_fragment.dts >> $DTS_FILE
}

其它平台类似,都有这个函数。用于针对ZCU106添加特定的设备树配置。

zcu106vcu_base_fragment.dts文件内容如下:
/ {
chosen {
bootargs = "earlycon clk_ignore_unused consoleblank=0 cma=1000M uio_pdrv_genirq.of_id=generic-uio";
stdout-path = "serial0:115200n8";
};
};

&axi_intc_0 {
compatible = "xlnx,xps-intc-1.00.a";
xlnx,kind-of-intr = <0x0>;
interrupt-parent = <&gic>;
interrupts = <0 89 4>;
};

&amba_pl {
zyxclmm_drm {
compatible = "xlnx,zocl";
status = "okay";
interrupt-parent = <&axi_intc_0>;
interrupts = <0 4>, <1 4>, <2 4>, <3 4>,
<4 4>, <5 4>, <6 4>, <7 4>,
<8 4>, <9 4>, <10 4>, <11 4>,
<12 4>, <13 4>, <14 4>, <15 4>,
<16 4>, <17 4>, <18 4>, <19 4>,
<20 4>, <21 4>, <22 4>, <23 4>,
<24 4>, <25 4>, <26 4>, <27 4>,
<28 4>, <29 4>, <30 4>, <31 4>;
};
vcu_apm: apm@0xb0040000 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "generic-uio";
reg = <0x0 0xb0040000 0x0 0x10000>;
reg-names = "generic";
};
};

我在处理的时候没有使用其它板子的方法删除掉自身的pl.dtsi,所以与其它平台略有区别。
chosen 修改了默认的配置,添加了1000MB的CMA,添加了UIO的驱动
axi_intc_0 添加了关于中断编号的信息
zyxclmm_drm就是上面rootfs中的zocl相关的信息(非常重要,不添加的话后面不能正常加载xclbin)
vcu_apm 是仿照VCU TRD添加的uio设备信息,可以用于监控HP端口上的数据带宽

2.4 总结
以上最核心的配置还是rootfs和device-tree,它门影响了驱动层面的东西,处理时候必须要注意。

3 其它
以后补充其它信息。

————————————————
版权声明:本文为CSDN博主「vacajk」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vacajk/article/details/103543175

最新文章

最新文章