为ZCU106订制SDSoC Platform

本文讲介绍如何使用PetaLinux来定制ZCU106的SDSoc Platform,包括带有xfce和opencv等第三方软件的rootfs。文章的后半部分也提供了如何将ubuntu运行在ZCU106中的方法。

SDSoC包含了zcu102的SDSoC Platform,该Platform提供了三种运行环境————Standalone,FreeRTOS,Linux。Platform提供的Linux只能用来运行SDSoC编译出来的elf文件,断电之后丢失全部数据,没有图形界面,也不能从板上接口(如USB)获取数据,功能十分有限。为了解决这个问题,我们要重新编译zcu102的内核,使能USB接口等外设以及mali的GPU,并使用Ubuntu的rootfs而非Petalinux产生的rootfs。
来自 lulugay的csdn博客
本文主要参考lulugay的文章,不过文章中有一小部分没有讲述(也可能是在其他文章中提到了),遂在这里补充一小部分细节和遇到的一些问题,作为个人的记录。(为“借鉴”找借口,逃

流程

  1. 使用Vivado综合DSA为Petalinux。

    DSA文件定义了Zynq的PL部分

  2. 使用Petalinux编译Linux内核以及根文件系统

  3. 替换SDSoc中的文件
  4. 制作SD卡

综合DSA

  1. 新建Vivado工程,命名为zcu106,新建一个bd命名为zcu106,并照此图进行搭建。
  • 其中ZYNQ进行了重命名为ps_e
  • 其中clk_wiz_0的输出时钟频率为75、100、150、200、300、400、600,Output Clocks中Reset Type设置为Active Low
  1. 配置属性
    在tcl console中输入
set_property PFM_NAME "xilinx.com:zcu106:zcu106:1.0" [get_files zcu106.bd]
set_property PFM.CLOCK { \
clk_out1 {id "0" is_default "false" proc_sys_reset "proc_sys_reset_0" } \
clk_out2 {id "1" is_default "false" proc_sys_reset "proc_sys_reset_1" } \
clk_out3 {id "2" is_default "false" proc_sys_reset "proc_sys_reset_2" } \
clk_out4 {id "3" is_default "true" proc_sys_reset  "proc_sys_reset_3" } \
clk_out5 {id "4" is_default "false" proc_sys_reset "proc_sys_reset_4" } \
clk_out6 {id "5" is_default "false" proc_sys_reset "proc_sys_reset_5" } \
clk_out7 {id "6" is_default "false" proc_sys_reset "proc_sys_reset_6" } \
} [get_bd_cells /clk_wiz_0]
set_property PFM.AXI_PORT { \
M_AXI_HPM0_FPD {memport "M_AXI_GP"} \
M_AXI_HPM1_FPD {memport "M_AXI_GP"} \
M_AXI_HPM0_LPD {memport "M_AXI_GP"} \
S_AXI_HPC0_FPD {memport "S_AXI_HPC" sptag "HPC0" memory "ps_e HPC0_DDR_LOW"} \
S_AXI_HPC1_FPD {memport "S_AXI_HPC" sptag "HPC1" memory "ps_e HPC1_DDR_LOW"} \
S_AXI_HP0_FPD {memport "S_AXI_HP" sptag "HP0" memory "ps_e HP0_DDR_LOW"} \
S_AXI_HP1_FPD {memport "S_AXI_HP" sptag "HP1" memory "ps_e HP1_DDR_LOW"} \
S_AXI_HP2_FPD {memport "S_AXI_HP" sptag "HP2" memory "ps_e HP2_DDR_LOW"} \
S_AXI_HP3_FPD {memport "S_AXI_HP" sptag "HP3" memory "ps_e HP3_DDR_LOW"} \
} [get_bd_cells /ps_e]
set intVar []
for {set i 0} {i<8} {incr i} {
lappend intVar Ini {}
}
set_property PFM.IRQ intVar [get_bd_cells /xlconcat_0]
set_property PFM.IRQintVar [get_bd_cells /xlconcat_1]

注意命令中的名称要与bd对应

  1. 生成hdf、bit文件

- 点击Generate Bitstream
- 完成后点击File->Export->Export Hardware,勾选Include Bitstream点击OK
- 然后Launch SDK后,可以在工程路径下的zcu106.sdk中找到hdf和bit

如果是Vivado2018.3版本,如果报错可以尝试输入以下命令,限制Vivado为单线程综合。

set_param general.maxThreads 1
  1. 打包dsa文件
    在tcl console中输入
write_dsa –force <path_to_project>/zcu106.dsa -include_bit
validate_dsa <path_to_project>/zcu106.dsa

编译Linux内核以及根文件系统

  1. 去Xilinx官网下载Petalinux与板子相对应的bsp文件
    PetaLinux - Installation Files

如果你还没有安装PetaLinux也可以在这里下载

  1. 在Bash中输入以下命令
petalinux-create -t project -s xilinx-zcu106-v2018.3-final-v2.bsp --name zcu106
cd zcu106
  1. 将dsa文件复制到该目录下,执行以下命令
petalinux-config --get-hw-description ./
  1. 此时弹出的界面,配置参数

- DTG Settings->Kernel Bootargs->取消Generate boot args automatically
- 在user set kernel bootargs 输入

earlycon clk_ignore_unused earlyprintk root=/dev/mmcblk0p2 rw rootwait cma=1024M
  • Image Packaging Configurations->Root filesystem type->SD card
  • /project-spec/metauser/recipes-kernel/linux/linux-xlnx/bsp.cfg添加
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_XILINX_APF=y
CONFIG_XILINX_DMA_APF=y
CONFIG_CMA_SIZE_MBYTES=1024
CONFIG_STAGING=y
# CONFIG_CPU_IDLE is not set
# CONFIG_CPU_FREQ is not set
CONFIG_EDAC_CORTEX_ARM64=y
  • /project-spec/metauser/recipes-bsp/device-tree/files/system-user.dtsi添加
/{
xlnk {
compatible = "xlnx,xlnk-1.0";
};
};
  • 将0001-Fix-for-gtr_sel0-polarity-correct-for-dual-lane-DP.patch复制到与system-user.dtsi同路径,device-tree-generation_%.bbappend改为
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://system-user.dtsi\
            file://0001-Fix-for-gtr_sel0-polarity-correct-for-dual-lane-DP.patch"

0001-Fix-for-gtr_sel0-polarity-correct-for-dual-lane-DP.patch下载地址

  • 保存并退出
  1. 配置rootfs
    输入以下命令配置rootfs
petalinux-config  -c rootfs
  • 勾选自己需要安装的软件
    如x11、xfce、opencv等,均可在Package Group中找到
  1. 编译
petalinux-build

替换SDSoc文件

  • 文件均在< path to plnx>/images/linux/路径下
  • 将u-boot.elf, bl31.elf, pmufw.elf, zynqmp_fsbl.elf, 替换掉SDSoC自带的zcu106/sw/a53_linux/boot下的对应文件, zynqmp_fsbl.elf需要改名为fsbl.elf;
  • 将image.ub替换掉SDSoC自带的zcu106/sw/a53_linux/a53_linux/image下的对应文件
  • 将综合步骤产生的.hdf和.bit文件替换掉SDSoC自带的zcu106/sw/a53_linux/a53_linux/prebuilt下的对应文件,注意改名。

以上操作推荐复制一份SDSoc自带的platform文件夹,进行替换。

制作SD卡

  1. 分区格式化
    将SD分为两个区,一个大小为2048mb、格式为Fat32的BOOT分区,另一个为剩余空间大小、格式为ext4的ROOT分区。
  2. 解压rootfs至SD卡
sudo tar xvf rootfs.tar.gz -C /media/ROOT
#如果需要测试Linux可以在这里将BOOT.BIN和image.ub拷贝至BOOT分区下
sudo cp images/linux/BOOT.BIN /media/BOOT/
sudo cp images/linux/image.ub /media/BOOT/

Ubuntu 的移植

在这一步可以使用Xilinx为ZCU102提供的镜像来进行完成,之前我使用过Ubuntu官方的源码进行移植,x11出现了不少问题。
Xilinx Ubuntu Desktop Image
下载好之后可以使用Win32DiskImager对ZCU102_UbuntuDesktop_2018_3.img进行烧写

烧写完毕后可以将在上一步生成的BOOT.BIN 和 image.ub复制到/boot分区中

此时的Ubuntu还不能运行SDSoc编译出的二进制文件
还需要将libsds_lib.so(从原始的SDSoc产生的镜像中考出)拷贝至/usr/lib中

参考

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

微信扫一扫,分享到朋友圈

为ZCU106订制SDSoC Platform
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close