前言

Xilinx的MPSoC系列芯片的部分型号提供了Video Codec Unit,可用于H.264/H.265格式视频的编解码。想要用起来Video Codec Unit需要花一番功夫,大体有三步:硬件层比特流的搭建,驱动层Linux内核+驱动的编译以及rootfs制作,应用层编译。我们尝试将VCU跟PYNQ(这里提到的PYNQ框架而不是PYNQ-Z1/Z2板卡)结合便于分发,这样在编译zcu104、ultra96等板卡的PYNQ img的时候VCU就已经集成在里面了,开发者拿过来编译好的PYNQ img就可以直接用了。

VCU的驱动分成kernel space跟user space两部分,kernel space的驱动在用petalinux编译内核时就打包进了内核,user space的驱动是存放在rootfs中的,所以直接使用petalinux编译出来的rootfs是没问题的,但是想在Ubuntu下跑起来VCU还要在Ubuntu里编译下驱动。

参考:

  1. https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842539/Zynq+UltraScale+MPSoC+VCU+TRD+2018.2
  2. https://github.com/Xilinx/PYNQ
  3. https://gstreamer.freedesktop.org/
  4. https://www.xilinx.com/support/documentation/boards_and_kits/zcu106/2018_2/ug1250-zcu106-vcu-trd.pdf
  5. https://www.xilinx.com/support/documentation/ip_documentation/vcu/v1_1/pg252-vcu.pdf

目前PYNQ框架还没有正式支持ZCU106,因此我们将在ZCU104上完成该设计。总共分三步:

  1. VCU在ZCU104上跑起来,使用petalinux编译的内核+rootfs
  2. VCU在ZCU104上跑起来,使用petalinux编译的内核+Ubuntu18.04 rootfs
  3. 把前面的步骤做成脚本集成到PYNQ框架下

VCU在ZCU104上跑起来

搭建VCU的Vivado工程

通过 Vivado 内置的 ZCU104模板新建一个工程,命名为zcu104_vcu,按照下图搭建Block Diagram

或在Vivado Tcl下输入

source <path to zcu104_vcu>/zcu104_vcu_bd.tcl

tcl文件在https://github.com/jiangwx/PYNQ-VCU/tree/master/zcu104_vcu下

Generate Bitsream并Export Design,选择将 Bit 打包进 HDF

创建Petalinux工程

  1. 新建工程
  • 在Xilinx官网上下载xilinx-zcu104-v2018.2-final.bsp在Xilinx官网上下载xilinx-zcu104-v2018.2-final.bsp
$ petalinux-create -t project -n zcu104_vcu_plnx -s <path to bsp>/xilinx-zcu104-v2018.2-final.bsp
$ cd zcu104_vcu_plnx
  • 将刚才生成的.hdf文件复制到zcu104_vcu_plnx下
  • 导入硬件设计
$ petalinux-config --get-hw-description ./
  • 将linux的rootfs改为SD卡
    Image Packaging Configurations -> Root filesystem type -> SD card
    DTG Settings->Kernel Bootargs->generate boot args automatically 取消勾选该选项,手动将bootargs 设置成
earlycon clk_ignore_unused earlyprintk root=/dev/mmcblk0p2 rw rootwait
  • 配置内核
$ petalinux-config -c kernel

General setup > Initial RAM file system and RAM disk (initramfs/initrd) support取消勾选

  • 添加gstreamer组件(用于驱动VCU)
$ petalinux-config -c rootfs

勾选packagegroup-petalinux-gstreamer,从bsp创建的petalinux工程已经勾选了这个选项
编译工程

$ petalinux-build
$ petalinux-package --boot --force --fsbl images/linux/zynqmp_fsbl.elf --fpga images/linux/*.bit --u-boot

我们要用到的images/linux下的rootfs.tar.gz,BOOT.BIN,image.ub这三个文件

将rootfs烧写进SD卡

准备SD卡

这部分工作在Linux 系统下可以用Gparted 来完成, 打开一个terminal。

$ sudo gparted

启动gparted工具,如果没有装Gparted, 输入

$ sudo apt-get install gparted

准备SD 卡的步骤如下:

  • 在Gparted 中选择SD 卡

    Gparted选择SD卡,读者可以根据容量确定/dev下的哪个设备是SD卡
  • umount SD 卡并删除SD 卡中已经存在的分区, 最终在Gparted 中显示unallocated。
    unmount SD卡

    删除已有分区

    Gparted中显示unallocated
  • 右键被分配的空间并按照下面的设置创建新的分区


Free Space Proceeding (MiB): 4, New Size (MiB) : 512, File System : FAT32, Label : BOOT
不要改变其他的设置, 点击Add 结束

  • 右键剩下的被分配的空间并按照下面的设置创建新的分区

Free Space Proceeding (MiB): 0, Free Space Following(MiB): 0, File System : ext4, Label :
RootFS 不要改变其他的设置, 点击Add 结束,设置完应如图所示


设置完成界面

  • 点击绿色的大对号应用所有设置创建分区
  • 关掉Gparted并mount刚才格式化过的两个分区

烧写SD卡

cd <path to petalinux project>/images/linux
sudo tar xzf rootfs.tar.gz -C /media/$(whoami)/rootfs/
sync
sudo chown root:root /media/$(whoami)/rootfs/
sudo chmod 755 /media/$(whoami)/rootfs/
cp BOOT.BIN image.ub /media/$(whoami)/BOOT

测试

  • 准备一个720p或1080p的mp4视频,也可以是其他分辨率,但是要是8的倍数
  • 将 ZCU104 设置为从 SD 卡启动: SW6[1:4] = ON, OFF, OFF, OFF,上电启动
  • 连接串口登陆板卡,Login: root, password: root
  • Mount SD 卡: mount /dev/mmcblk0p1 /mnt
  • 测试

尝试从 MP4 文件解码:

gst-launch-1.0 filesrc location=xx.mp4 ! qtdemux ! h264parse ! omxh264dec ! queue max-size-bytes=0 ! filesink location=yy.yuv

尝试从 RAW YUV Video 文件编码为 MP4:

gst-launch-1.0 filesrc location=xx.yuv ! videoparse format=nv12 width=WW height=HH framerate=20/1 ! omxh264enc ! queue ! h264parse ! mp4mux ! filesink location=yy.mp4

欢迎大家关注Xilinx学术合作以及Pynq的官方公众号,里面有许多优质的学习资源等着你哦


希望了解HLS的同学可以关注公众号Xilinx学术合作以及PYNQ中文社区获取最新版《FPGA并行编程-- 以HLS实现信号处理为例》pdf ,关注任一公众号,回复 pp4fpgas 即可获得

MPSoC PYNQ框架集成VCU-1.VCU在ZCU104上运行相关推荐

  1. ultra96搭建支持PYNQ框架的SDSoC Platform

    前言 用过的ZYNQ开发板有PYNQ-Z1,PYNQ-Z2,ZC702,MiniZed,ZCU102,ZCU104还有本篇文章的主角--Ultra96,在这些开发板里我最喜欢的就是这块Ultra96. ...

  2. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  3. Spark 2.4重磅发布:优化深度学习框架集成,提供更灵活的流式接收器

    Apache Spark 2.4.0是2.x系列中的第五个版本.此版本增加了屏障执行模式,以便更好地与深度学习框架集成:引入30多个更高阶的内置函数,能够更轻松地处理复杂数据类型:优化K8s集成,同时 ...

  4. ueditor集成实例php,Laravel框架集成UEditor编辑器的方法图文与实例详解

    本文实例讲述了Laravel框架集成UEditor编辑器的方法.分享给大家供大家参考,具体如下: 一. 背景 在项目开发的过程中,免不了使用修改功能,而富文本编辑器是极为方便的一种推荐,当然,个人认为 ...

  5. Java 三大框架集成项目结构

    用MyEclipse开发的Java 三大框架集成项目,典型结构如下. 一 展开项目名称,首先是src文件夹:存放实现业务功能的java源文件*.java: struts2的action代码文件存放在a ...

  6. Spring与其他Web框架集成

    Spring与多种流行Web应用框架(Struts.JSF和DWR)集成的方法. Spring强大的IoC容器和企业支持特性使其十分适于实现Java EE应用的服务和持续层. 对于表现层,可以在许多不 ...

  7. 请问如何把.net framework框架集成在安装程序里头?

    请问如何把.net framework框架集成在安装程序里头? 大家都知道在没有framework框架的机子上是无法运行.net编写的软件的 虽然把编写的软件做成安装软件在没有框架的机子上要安装时会自 ...

  8. Spring+SpringMVC+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  9. knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案

    knife4j knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量, ...

最新文章

  1. Linux容器的发展历史及其未来趋势
  2. ubuntu软件安装(个人PC)
  3. 000-SQL Server
  4. pytorch慢到无法安装,该怎么办?
  5. js矢量图类库:Raphaël—JavaScript Library
  6. 0.《Apollo自动驾驶工程师技能图谱》
  7. cpu线程_CPU核数和线程数有什么用?什么意思?CPU核数和线程的关系与区别
  8. 退出所有循环_探索未知种族之osg类生物---呼吸分解之事件循环三
  9. java 维文生成图片_维文、哈萨克文、柯尔克孜文检测 (java实现把UTF-8转为unicode)...
  10. 浅谈c语言函数调用指针
  11. javascript 快速入门
  12. Mock数据模板规范详解
  13. Java IO流基础
  14. Axure RP 9格式刷使用说明【教程三】
  15. java中cleanup的使用_【Lombok注解】@Cleanup 自动资源管理:安全无困扰地调用close方法...
  16. 杭电OJ 11页2025//查找其中的最大字母,在该字母后面插入字符串“(max)”
  17. C盘空间不足怎么办?教你将其他盘存储空间分给C盘
  18. 美国人在世界各地随意干扰别国内政,发动战争,你认为这样做得对吗?
  19. win10连着网但网页打不开,代理服务器出现问题,或地址有误
  20. 攻防世界web新手fileclude

热门文章

  1. 根据DatabaseMetaData确定数据库类型
  2. AcWing_4261
  3. 一文搞懂slq 左右连接
  4. slq的 单行函数汇总介绍
  5. 关于找不到java.dll 解决方案
  6. 72 中序遍历和后序遍历树构造二叉树
  7. 深入理解java抽象与接口
  8. 机器学习入门(十三):SVM——线性可分 SVM 原理
  9. 什么是Web SCADA系统?
  10. 以中国数字技术,驱动“数字中国”