電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 1415|回復(fù): 0
收起左側(cè)

生成PL設(shè)備樹及動態(tài)加載PL程序和設(shè)備樹

[復(fù)制鏈接]

678

主題

902

帖子

8293

積分

高級會員

Rank: 5Rank: 5

積分
8293
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-7-6 11:51:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
; w6 ~$ j" |" W7 c' Z# ]5 t9 ^1 F, ^2 g
  • 實驗說明- M1 W! M# |/ {6 J
操作環(huán)境:
  • Windows 7/10 64bit
  • Xilinx Vivado 2017.4
  • Ubuntu 14.04
    ) O& n9 V+ z  [, j; E/ t; U0 j/ v
. [( v, C4 E8 ]* u( Z) J$ R6 d3 R' s
表 1
開發(fā)板型號
是否支持本實驗
TLZ7x-EasyEVM
支持
TLZ7xH-EVM
支持

& |. q3 b* L7 x, a7 P8 y6 B
在運行Linux系統(tǒng)下,對于Zynq PL端的開發(fā),可以通過動態(tài)加載PL端程序、PL設(shè)備樹的方法對其進行配置。PL端設(shè)備樹文件xxx.dtsi的生成,需要依賴于Vivado工程的xxx.hdf硬件描述文件和Xilinx設(shè)備樹源碼。
本文以光盤"All-Programmable-SoC-demos\tl-axi-gpio-led-demo"例程為例,演示生成、編譯PL端設(shè)備樹文件,以及動態(tài)加載PL端程序和PL設(shè)備樹的方法。
  • 生成PL端設(shè)備樹文件
  • 導(dǎo)出Vivado工程硬件描述文件
    3 T( R; E* x! x/ h" N. F8 m! Q% I. B
參照《基于TcL腳本生成Vivado工程及編譯》文檔,生成Vivado工程并對其進行編譯,后面將由Vivado工程編譯生成的xxx.bin文件進行動態(tài)加載。
點擊Vivado的菜單欄"File -> Export -> Export Hardware…",彈出對話框中點擊OK,導(dǎo)出tl-axi-gpio-led-demo例程的xxx.hdf硬件描述文件。

% e* x  G' V4 w( F. E' k9 W
" @$ t0 _+ s! h% v8 g  ^
導(dǎo)出完成后,將在"All-Programmable-SoC-demos\tl-axi-gpio-led-demo\"工程目錄下生成"\hw\src\runs\axi_gpio.sdk\axi_gpio_wrapper.hdf"文件,同時TcL控制臺打印如下信息。
! ]5 A- |, d! I* g6 [" Q$ [
點擊Vivado的菜單欄"File -> Launch SDK",使用Xilinx SDK加載xsdk工程。在彈出對話框中點擊OK,打開xsdk工程如下圖所示。
; B. a: o8 S' a" f4 [8 c

9 T- t/ u- a. V

, A, h9 F% o8 l
  • 導(dǎo)入device-tree-xlnx5 J0 X( w# w3 k: ?6 g" {
Xilinx設(shè)備樹源碼為“光盤\Linux-system\device-tree-xlnx\src\device-tree-xlnx-[Git 系列號]-[版本號].tar.gz”,其中Git系列號與版本號以實際的為準(zhǔn)。將其解壓到Windows非中文目錄,解壓后安裝包內(nèi)容如下圖所示。
PL端xxx.dtsi設(shè)備樹文件需要依賴于Xilinx設(shè)備樹源碼生成。

) }* x! y! F- g/ _9 r+ e1 s7 k0 J
點擊Xilinx SDK菜單欄"Xilinx -> Reposistories"。

  ]7 }/ |1 t" s
在彈出的Xilinx SDK資源庫配置界面中,點擊"Repositories -> New…",彈出對話框中選中解壓到非中文路徑下的device-tree-xlnx源碼,點擊“確定”將其添加進來。

2 b3 l2 V  S) a2 L
添加完device-tree-xlnx設(shè)備樹源碼如下圖所示,點擊OK完成。
3 p# ^8 D* K( \- P1 r9 N6 O* V8 r
  • 生成PL設(shè)備樹) [# W6 m. I$ h$ g% ]# @
點擊Xilinx SDK菜單欄"File -> New -> Board Support Package",新建Board Support Package。

" s# x! y7 I8 Z( B8 u
在彈出新建Board Support Package配置界面中,按照下圖默認選項配置Project name(BSP包命名),Hardware Platform,CPU,同時在Board Support Package選項中勾選"device_tree",點擊Finish完成配置。
5 O& P. T# {% T6 t# f
在彈出的界面,將dt_overlay的值修改成true,該選項將支持設(shè)備樹文件的動態(tài)加載,如圖所示。

( X* j$ O+ P. c) m% A5 k
點擊OK,完成SoC工程"hw\src\runs\axi_gpio.sdk\device_tree_bsp_0\pl.dtsi"設(shè)備樹文件修改,如下圖所示。
5 ?4 X& O: I/ v- R1 X4 ?0 q
  • pl.dtsi文件是PL端使用的IP核對應(yīng)的設(shè)備樹,我司實際開發(fā)中僅用到此設(shè)備樹文件;
  • zynq-7000.dtsi文件是Xilinx提供給所有Zynq-7000開發(fā)板使用(沒用到此文件);
  • system.dts根據(jù)開發(fā)板上的具體實現(xiàn),修改設(shè)備樹使其可正常工作(沒用到此文件)。​​​​​​​
    5 e3 `) m- s% M" p6 h3 W5 [
  • 編譯設(shè)備樹
    ! [  b+ o0 T+ g% I+ A# B6 O
在Ubuntu下新建"/home/tronlong/Zynq/Linux-system/device-tree-xlnx"工作目錄,將前面步驟生成的"hw\src\runs\axi_gpio.sdk\device_tree_bsp_0\pl.dtsi"設(shè)備樹文件拷貝到該目錄下,如下圖所示:
Host#mkdir -p /home/tronlong/Zynq/Linux-system/device-tree-xlnx
Host#cd/home/tronlong/Zynq/Linux-system/device-tree-xlnx
Host#ls

* t6 T1 j0 t9 v* `( J$ b7 q
執(zhí)行Linux內(nèi)核編譯時,會在Linux內(nèi)核源碼"scripts/dtc/"目錄下生成設(shè)備樹編譯器dtc工具。執(zhí)行如下指令,使用dtc工具編譯pl.dtsi設(shè)備樹源文件。
編譯完成后將在當(dāng)前目錄下生成dtbo文件,指令中dtc工具路徑以實際情況為準(zhǔn)。
Host#ls /home/tronlong/Zynq/Linux-system/kernel/scripts/dtc
Host#/home/tronlong/Zynq/Linux-system/kernel/scripts/dtc/dtc -q -@ -O dtb -o pl.dtbo pl.dtsi

* {2 _6 E& L' h# F4 [- O9 c
  • 動態(tài)加載PL程序和設(shè)備樹2 F- N, ], t( b  \1 n6 e
開發(fā)板上電啟動進入文件系統(tǒng),執(zhí)行如下指令新建"/lib/firmware"目錄。將編譯生成的dtbo文件,以及由Vivado工程編譯生成的xxx.bin文件復(fù)制到"/lib/firmware"目錄,并將xxx.bin文件重命名為system_wrapper.bin。
Target#mkdir -p /lib/firmware
Target# mv /lib/firmware/axi_gpio_xc7z020.bin /lib/firmware/system_wrapper.bin

/ Y9 n1 i" J" N/ l4 o, |, A( [& {
執(zhí)行以下指令在文件系統(tǒng)根目錄下新建configfs目錄及設(shè)備節(jié)點,并從"/lib/firmware"目錄下動態(tài)加載PL端程序和dtbo文件。
Target#mkdir /configfs
% U  m  P# C2 Y( Q# e. ^Target#mount -t configfs configfs /configfs
1 |9 C; a) b# d6 Q7 V. Q/ x8 Y  ZTarget#mkdir /configfs/device-tree/overlays/full; z( ~1 G* y) i& j+ u  _# j
Target#echo -n "pl.dtbo" >  /configfs/device-tree/overlays/full/path
* e) H+ D, [3 k$ p) U. N! A; D8 c. @( T# U" R+ I4 R9 Q+ `" \1 e3 w4 y

$ z6 X6 L0 W0 \9 n# _若需要重新加載dtbo文件,執(zhí)行如下指令刪除full目錄,再重新創(chuàng)建,然后再動態(tài)加載dtbo文件即可。
- ?: u. ~6 ~) H; k3 ^+ cTarget#rmdir /configfs/device-tree/overlays/full
% Z+ p3 a9 i. M6 H7 \2 c7 gTarget# mkdir /configfs/device-tree/overlays/full
0 y+ w* b+ U1 W" H, E( d6 c, iTarget# echo -n "pl.dtbo" >  /configfs/device-tree/overlays/full/path* d3 @0 z% ~. Q6 P
' e; d$ D/ Q* b! n; t& {& m

4 k  p8 F3 X( Z
  • 動態(tài)加載多個設(shè)備樹& S. a, H% b7 V. c3 I) B
若按照上面的步驟加載了一個設(shè)備樹,如果還想加載其他dtbo,可以在"/configfs/device-tree/overlays/"目錄下再任意新建一個文件夾,然后再加載設(shè)備樹:
Target# mkdir /configfs/device-tree/overlays/pl_dtbo
Target# echo -n “pl.dtbo” > /configfs/device-tree/overlays/pl_dtbo/path
7 B4 m) |  e6 \0 B5 u
嵌入式DSP、ARM、FPGA多核技術(shù)開發(fā),學(xué)習(xí)資料下載:http://site.tronlong.com/pfdownload
回復(fù)

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表