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 <petalinux_project>/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 其它
以後補充其它信息。