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