1.1 xilinx zynqMp 架构html
1.1.1 16nm 级别工艺linux
Zynq UltraScale+ MPSoC架构c++
Xilinx新一代Zynq针对控制、图像和网络应用推出了差别化的产品系,这在Xilinx早期的宣传和如今已经发布的文档里已经说得很清楚了。她的产品系如图2所示。git
图2 产品表github
从图2看到,这个系列的Zynq算是8核(或9核)异构产品:四核的ARM-CortexA53 CPU、双核的Cortex-R5 RPU、Mali-400 GPU(一个Geometry核,两个像素核)、PL逻辑以及视频编解码器Codec核。shell
在表2中,ZU2E、ZU3E为针对控制类应用,逻辑和Block RAM资源较少,没有Video Codec和高速收发器。ZU4E、ZU2E和ZU7E针对视频类应用,有内部的UltraRAM资源、Video Codec和GTH高速收发器。其余型号针对网络应用,除了Video Code没有外,其它高大上的东西都有,好比更高速的收发器GTY,还有150G Interlaken和100G Ethernet MAC/PCS/RS-FEC等。编程
熊猫君是作图像的,下面的描述都是针对图像版的Zynq UltraScale+而言的。ubuntu
由于PS部分的资源是固定的,你们都同样,在后面一块儿说就行。PL部分由于有这三个东西,将使设计如虎添翼:vim
a)大量的Block RAM和Ultra RAM资源,小20Mb的内部RAM资源,对分块处理图像,那应该会带来很多的便捷;windows
b)Video Code:这个东西是集成在PL侧的硬核,有了它,图像压缩和解压缩都不用愁了;
c)GTH:PL端集成的GTH收发器,对SDI、DP等图像接口接入那是十分的方便,固然也能够作PCIe咯。
很少说了,熊猫君从Xilinx官方文档UG1085上截一个图来表示这个高大上通用SoC的系统级架构,也就是下面的图3啦。
图3 Zynq UltraScale+ MPSoC系统架构图
http://blog.csdn.net/haoxingheng/article/details/50098777
时隔三年,Xilinx推出了其全新的异构SoC,大名叫ZynqUltraScale+。相比它的前辈Zynq-7000,这款SoC功能显得更增强劲:最显著的变化是新加入了GPU和视频编解码器,并且编解码器在PL端,PS端的高速接口更加丰富。按照Xilinx官方的说法,Zynq UltraScale+主要针对控制、图像和网络这三大块,好比说汽车辅助驾驶、8K图像、100G网、物联网等等领域(兵马未动,粮草先行啦,Xilinx早早的就针对这些差别化应用推出了SDx集成开发环境)。
从图4能够看到,这是一个带SDI接口的IP相机。大体分为两大块:
a)PL负责原始数据采集、Bayer域处理、ISP和图像编码;
b)PS负责对PL的管理、控制和协处理、RTSP服务器、千兆网和SD卡数据存储。
http://blog.csdn.net/haoxingheng/article/details/50076591
1.2 xilinux zynqMp 开发环境搭建
1.2.1 移植petaLinux之安装petalinux
start.安装虚拟机,在虚拟机里安装linux系统(ubuntu16)
sudo passwd
命令,设置超级用户su时的密码a.更新apt-get(可选,加速用,同传统方式移植那篇文章的第二节)
b.安装petalinux的依赖环境
安装petalinux的必要依赖环境,直接复制粘贴下面的命令行到shell中,系统自动下载安装下面的工具:
sudo apt-get install build-essential vim tofrodos \
iproute2 gawk gcc git make net-tools zlib1g-dev \
libssl-dev flex bison libselinux1 libncurses5-dev \
tftpd lib32z1 lib32ncurses5 libbz2-1.0:i386 \
lib32stdc++6 xvfb chrpath socat autoconf libtool
c.修改/bin/sh
shell中输入:dpkg-reconfigure dash
,在出现的界面中选择‘否’
d.下载petalinux
去官网下载petalinux-v2017.1-final-installer.run
(文件8个G,上传不了)
e.安装petalinux
home/hlf/mnt
),用鼠标右键,新建一个文件夹petalinux
hlf@hlf-virtual-machine:~/mnt$
这样的),shell中输入命令:./petalinux-v2017.1-final-installer.run ./petalinux
f.补一些库的安装
apt-get install texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386 libncurses5 libncurses5-dev libc6:i386 libstdc++6:i386 zlib1g:i386 libssl-dev tftpd tftp openbsd-inetd
先安装刚刚安装时,提示缺乏的库:
apt-get install texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386
安装一些以后须要的库,全都安装了避免麻烦:
apt-get install libncurses5 libncurses5-dev
apt-get install libc6:i386 libstdc++6:i386 zlib1g:i386
apt-get install libssl-dev
apt-get install tftpd tftp openbsd-inetd
,安装完成后,编辑一下/etc/inetd.conf里的东西: 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
命令,以肯定成功(打印出udp 0 0 0.0.0.0:69 0.0.0.0:*
)g.验证是否安装成功 source /home/hlf/mnt/petalinux/settings.sh
成功定位不报错的话,基本是成功了的 echo $PETALINUX
命令行会打印出安装路径/home/hlf/mnt/petalinux
1.2.2 搭建硬件环境
新建工程,选择对应的芯片型号,并新建一个 BD 原理图文件(命名为system),而后添加一个ZYNQ Processing system的IP核,并设置好与硬件相符合的PS和PL时钟以及DDR型号
而后右键单击 Block 文件,文件选择 Generate the Output Products,而后右键单击 Block 文件,选择 Create a HDL wrapper,根据 Block 文件内容产生一个 HDL 的顶层文件,并选择让 vivado 自动完成
经Vivado综合,实现后,在Vivado中导出硬件,输出PetaLinux所须要的硬件描述文件
输出的文件就在“/(工程文件夹)/(工程名).sdk”这个文件夹下,这个文件夹下的system_wrapper.hdf待用
1.2.3 搭建petalinux bsp工程
a.定位目录
先在shell中找一个准备存放工程的地方,(个人是home/hlf/PRO
),命令行cd home/hlf/PRO
b.定位编译链
根据安装petalinux的路径: source /home/hlf/mnt/petalinux/settings.sh
c.建立petalinux工程
将在PRO目录下面,建立一个工程: petalinux-create --type project --template zynq --name h1_petalinux_test
h1_petalinux_test是工程名,该命令会自动在PRO文件夹里建立h1_petalinux_test文件夹
d.引用刚才输出的硬件描述文件
把以前导出的硬件描述文件system_wrapper.hdf拷贝到虚拟机中的h1_petalinux_test工程文件夹下,而后: petalinux-config --get-hw-description=/home/hlf/PRO/h1_petalinux_test
会进入一个配置界面,在里面咱们能够配置一些系统参数,主要的配置包括:启动方式,启动存储器分区表,启动文件名称等等,本文暂不对其修改(默认是从SD卡中启动),而后等待其配置(时间较长)
上图能够进行基本项配置,
e.获取文件夹权限
在上一步完成后,输入命令sudo chmod -R 777 /home/hlf
获取文件夹权限(工程文件夹和petalinux的安装文件夹),不然编译的时候,会发生错误
目前为止,在shell中的命令既能够以超级用户su的身份运行也能够以普通用户的方式运行(建议所有都用普通用户的方式,省得切换),可是等下编译u-boot和kernel以及rootfs的时候,必须以普通用户的身份运行命令行,不然会报错的
f.编译u-boot
注意:到此处的时候,不能再用超级用户了,要切换到普通用户下,以后的全部操做都在普通用户下
普通用户的shell中输入petalinux-config -c u-boot
(依然要事先输入source /home/hlf/mnt/petalinux/settings.sh
命令),而后等待GUI出来,这里暂时不改动啥,直接save(save为u-boot.config
,名字随便取但不要留空),而后继续等(新建工程要等的时间仍是比较长的,后来就会好的)
g.编译kernel
命令petalinux-config -c kernel
,操做同上(save为kernel.config
)
h.编译rootfs
命令petalinux-config -c rootfs
,操做同上(save为默认便可)
i.设备树配置
若要修改,直接在工程文件夹下,Ctr+F搜索.dts
就能够找到相关文件,作出相应修改”
暂时默认吧,不修改,按照它自动生成的设备树
j.编译工程
配置完成后能够生成适配该硬件的fsbl,u-boot,kernel,rootfs等文件, 输入命令petalinux-build
,等待便可,最后生成的文件在 image/linux下
k.生成BOOT.BIN
把shell定位到image/linux目录下,执行命令 petalinux-package --boot --format BIN --fsbl zynq_fsbl.elf --fpga system_wrapper.bit --u-boot
,在文件夹下就能够发现,多了一个BOOT.BIN
l.将以下文件拷入SD卡
m.开机
将SD卡,插回,开机,串口打印信息为:
....
n。生成完启动文件后能够进行模拟适配
若是不想链接开发板能够先用模拟题运行u-boot,kernel,看看是否是正确
petalinux-boot –qemu –u-boot
petalinux-boot –qemu –kernel
密码:root
若是模拟器运行没问题就能够用jtag下载到zynq板子上进行后续调试了,命令参看ug1157-petalinux-tools-command-line-guide
http://blog.csdn.net/zhaoxinfan/article/details/57530627
http://blog.csdn.net/long_fly/article/details/78727813
1.3.Xilinx zynqMP开发基本步骤
a)使用Vivado 工具生成 .hdf文件,好比ZU9_cpu.hdf
b)使用SDK工具生成FSBL。FSBL的做用主要是初始化PLL,DDR,MIO管脚分配,烧写FPGA,运行uboot等。核心代码代码位于psu_init.c中。
c)生成uboot
d)使用bootgen工具生成BOOT.BIN文件,bootgen须要使用.bif文件作输入。bif指导那个文件用做输入,targets等
//arch = zynqmp; split = false; format = BIN
the_ROM_image:
{
[fsbl_config]a53_x64
[bootloader]C:\cpu_test\cpu_test\cpu_test.sdk\fsbl\Debug\fsbl.elf
[destination_device = pl]C:\cpu_test\cpu_test\cpu_test.sdk\cpu_test_wrapper_hw_platform_0\cpu_test_wrapper.bit
[destination_cpu = a53-0]C:\cpu_test\cpu_test\cpu_test.sdk\uboot.elf
}
e)把BOOT.BIN,system.dtb和Image文件copy到SD卡第一分区,把rootfs解压到SD卡ext4分区。
http://blog.csdn.net/ambercctv/article/details/69945902
1.3.1 zynq MP的启动
(1)启动过程
下图时xilinx手册上摘录的图,描述了zynqMP 上的linux的整个boot过程
系统复位后,首先PMU(Platform Management Unit)会执行PMU ROM中固化代码,执行完后会启动CSU处理核,CSU会负责从启动存储介质中加载FSBL(First Stage Boot Loader)至on-chip ram中,FSBL能够由RPU负责执行也可由APU负责执行,须在制做FSBL时肯定。继而,CSU激励RPU或APU执行FSBL。FSBL会加载PMU Frameware交付PMU执行。继而FSBL执行完成后切换至ATF(Arm Trusted Frame),ATF于APU上执行。而后ATF启动u-boot,u-boot为linux配置好运行环境将执行权交付给Linux内核。
能够看出和Zynq-7000相似,ZynqUltraScale+ MPSoC也是三级启动方式,只是Xilinx又给它们起了一个新名字,启动分为如下三级:
a) Pre-configuration:复位后执行PMU ROM代码,讲外部FSBL代码搬到内部的OCM。至关于Zynq 的Boot ROM执行。
b) Configuration:在内部的OCM代码,系统根据BOOTHeader的内容选择在CPU(Cortex-A53)仍是RPU(Cortex-R5)上执行。负责初始化必要的时钟、内存和外设,加载Bit文件和用户代码等。
c) Post-configuration:执行用户代码。
http://blog.csdn.net/haoxingheng/article/details/50099373
(2)启动文件详解
对于ZYNQ MPSoC有如下几个文件,
a.FSBL
这个FSBL跟zynq-7000的fsbl是同样的,用户能够选择用cortex-a53制做启动的fsbl文件,也能够选择用cortex-r5来制做启动的fsbl文件。
b.PMUFW (pmufw.elf)
PMU的配置文件,但这个不是必须的,用户是可选的,MPSOC有LPD.FPD.PL三路电源轨,PMU是为了更好的管理电源和控制功耗,通常状况下,大部分客户不须要修改这个elf文件,这个文件不是制做BOOT.bin必需要的。
c.ARM Trusted Firmware(bl31.elf)
ARM Trusted Firmware文件,是一个arm加密固件,用户根据须要来定制,这个文件不是制做BOOT.bin必需要的。
d.PL bitstream(design_1_wrapper.bit)
这是FPGA端的bit配置文件,用户根据本身的须要来配置bit文件,这个文件不是制做BOOT.bin必需要的。
e.uboot(u-boot.elf)
uboot文件,目前我使用的是version是2016.7,制做BOOT.bin须要这个文件。
f.image.ub
这个文件是由petalinux-package --image 打包kernel rootfs device-tree这个三个文件合成的image.ub文件,也就是说,当你启动mpsoc的时候,你最终只须要两个文件BOOT.bin image.ub。
http://blog.csdn.net/luhao806/article/details/58591497
1.3.2 uboot 的生成
MPSOC系列基于ZCU102 uboot的编译生成
查看board/xilinx/zynqmp/zynqmp.c 中board_late_init
这里须要检查了zynqMP的启动方式,并设置了环境参数 modeboot ,这次测试使用sd卡boot,故modeboot 会被设置为sdboot,故u-boot会执行run sdboot命令,其中sdboot 环境参数设置在include/configs/xilinx_zynqmp.h中定义,
此处还实现了TFTP形式的boot以及nfs文件系统,这里就不解释TFTP Boot及nfs(xilinx默认配置是从sd卡第一分区(FAT格式)读取devicetree以及Image实现boot,并以sd卡第二分区(ext4格式)做为系统的跟文件系统)。
uboot 生成:
cd $u-boot-xlnx-dir
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make distclean
make xilinx_zynqmp_zcu102_rev1_0_defconfig
make -j4 #-jn 为你要运行的核数
http://blog.csdn.net/baidu_23935667/article/details/79099803
or:
1)windows vivado sdk create uboot.bin
打开vivado工程并生成bit stream
导入到 sdk
打开sdk
建立预置的fsbl工程
Xilinx Tools>Creat Boot Image
选择BIF file path
选择Output path
在Boot image partitions中
add>fsbl.elf
add>XXX.bit
add>u-boot.elf
Creat Image
其中bif为路径配置文件:
bif文件以下所示:
//arch = zynqmp; split = false; format = BIN the_ROM_image: { [fsbl_config]a53_x64 [bootloader]PROJECT_DIR/project_1.sdk/fsbl/Debug/fsbl.elf [pmufw_image]PROJECT_DIR/project_1.sdk/pmu/Debug/pmu.elf [destination_device = pl]PROJECT_DIR/project_1.sdk/design_1_wrapper_hw_platform_0/design_1_wrapper.bit [destination_cpu = a53-0, exception_level = el-3]PROJECT_DIR/project_1.sdk/bl31.elf [destination_cpu = a53-0, exception_level = el-2]PROJECT_DIR/project_1.sdk/u-boot.elf }
其中PMU、FSBL由SDK中生成
http://blog.csdn.net/aostas/article/details/78149300
2)petalinux 合成 boot.bin
1.3.3 MPSOC系列基于ZCU102的linux的kernel的编译
cd linux-xlnx
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make xilinx_zynqmp_defconfig
make menuconfig make -j4 #-jn n为你要运行的核数
http://blog.csdn.net/baidu_23935667/article/details/79099803
or:
手头必备的TRM UG1085(http://www.xilinx.com/support/documentation/user_guides/ug1085-zynq-ultrascale-trm.pdf)
寄存器手册(http://www.xilinx.com/support/documentation/registers/ug1087/ug1087-zynq-ultrascale-registers.html)
http://blog.csdn.net/kkk584520/article/details/50042757
https://wiki.trenz-electronic.de/pages/viewpage.action?pageId=14746264
1.4.2
附录:
1. zcu102 Linux 完整打印信息log
http://blog.csdn.net/luhao806/article/details/58602337
2. http://www.wiki.xilinx.com/
(提供 了几乎全部的学习资料,包括:建立FSBL,配置编译内核,配置编译u-boot,编译生成dtb,制做根文件系统,linux 设备驱动程序,设计例程等等)
3.zc702 学习总结
http://blog.csdn.net/Klaus_Wei/article/details/38063349
4. zcu102 pcie视频传输方案
http://blog.csdn.net/vacajk/article/details/78970368
5.zcu102
ZCU102 HDMI Demo测试:
http://blog.csdn.net/vacajk/article/details/78970533
6. zcu102 xen 开源视频监视
http://blog.csdn.net/telantan/article/details/78872451
7.
闲话Zynq UltraScale+ MPSoC(连载4)——IO资源
http://blog.csdn.net/haoxingheng/article/details/50100573
闲话Zynq UltraScale+ MPSoC (连载3)——启动加载
http://blog.csdn.net/haoxingheng/article/details/50099373
闲话Zynq UltraScale+ MPSoC (连载2)——架构和电源要求
http://blog.csdn.net/haoxingheng/article/details/50098777
Zynq UltraScale+ MPSoC新鲜出炉
http://blog.csdn.net/kkk584520/article/details/50042757
8. zynq petalinux编译用户自定义系统
http://blog.csdn.net/shichaog/article/details/51544173
9.ZYNQ跑系统 系列(二) petalinux方式移植linux
http://blog.csdn.net/long_fly/article/details/78727813
10 ZCU102开发 (1) 运行基于ubuntu文件系统的Linux
http://blog.csdn.net/telantan/article/details/73928695
【Zynq学习笔记3】petaLinux使用
http://blog.csdn.net/wt881010/article/details/71597478
zynq之petalinux安装和编译
http://blog.csdn.net/shichaog/article/details/51074980
将PetaLinux移植到FPGA上的缘由和步骤详解 - 全文
http://www.elecfans.com/emb/fpga/20171117581662_a.html
11. xlinux官网资料
http://china.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html#documentation
https://china.xilinx.com/search/support-keyword-search.html?searchKeywords=PetaLinux%20Tools%20Documentation
https://china.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug1156-petalinux-tools-workflow-tutorial.pdf
http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html
https://china.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug1144-petalinux-tools-reference-guide.pdf