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

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

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

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

[復(fù)制鏈接]

678

主題

902

帖子

8293

積分

高級(jí)會(huì)員

Rank: 5Rank: 5

積分
8293
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-7-6 11:51:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

: A: `0 Y2 E+ ~- A! i
  • 實(shí)驗(yàn)說(shuō)明5 O0 F3 i$ A; [# Y+ j
操作環(huán)境:
  • Windows 7/10 64bit
  • Xilinx Vivado 2017.4
  • Ubuntu 14.04# U, Y8 W3 R- q7 V0 F

8 J& N" C% \, o1 e9 \- `$ N/ r
表 1
開(kāi)發(fā)板型號(hào)
是否支持本實(shí)驗(yàn)
TLZ7x-EasyEVM
支持
TLZ7xH-EVM
支持
  C# J& U' x8 u7 M
在運(yùn)行Linux系統(tǒng)下,對(duì)于Zynq PL端的開(kāi)發(fā),可以通過(guò)動(dòng)態(tài)加載PL端程序、PL設(shè)備樹(shù)的方法對(duì)其進(jìn)行配置。PL端設(shè)備樹(shù)文件xxx.dtsi的生成,需要依賴于Vivado工程的xxx.hdf硬件描述文件和Xilinx設(shè)備樹(shù)源碼。
本文以光盤(pán)"All-Programmable-SoC-demos\tl-axi-gpio-led-demo"例程為例,演示生成、編譯PL端設(shè)備樹(shù)文件,以及動(dòng)態(tài)加載PL端程序和PL設(shè)備樹(shù)的方法。
  • 生成PL端設(shè)備樹(shù)文件
  • 導(dǎo)出Vivado工程硬件描述文件
    5 U5 L  s- s/ w  g7 Q  Q
參照《基于TcL腳本生成Vivado工程及編譯》文檔,生成Vivado工程并對(duì)其進(jìn)行編譯,后面將由Vivado工程編譯生成的xxx.bin文件進(jìn)行動(dòng)態(tài)加載。
點(diǎn)擊Vivado的菜單欄"File -> Export -> Export Hardware…",彈出對(duì)話框中點(diǎn)擊OK,導(dǎo)出tl-axi-gpio-led-demo例程的xxx.hdf硬件描述文件。

# N2 U$ c5 O6 I8 |

8 B- Y) u) _$ w! u% l! _: R
導(dǎo)出完成后,將在"All-Programmable-SoC-demos\tl-axi-gpio-led-demo\"工程目錄下生成"\hw\src\runs\axi_gpio.sdk\axi_gpio_wrapper.hdf"文件,同時(shí)TcL控制臺(tái)打印如下信息。
/ V5 C+ j6 J4 F9 T8 c* ~, `
點(diǎn)擊Vivado的菜單欄"File -> Launch SDK",使用Xilinx SDK加載xsdk工程。在彈出對(duì)話框中點(diǎn)擊OK,打開(kāi)xsdk工程如下圖所示。

1 t" Y! u  s- l5 B& G0 E

. G. K& n) D; ?1 \" I* f" ^  y

/ q3 r% [( i0 U) m
  • 導(dǎo)入device-tree-xlnx
    , h6 [# d( G2 M' t
Xilinx設(shè)備樹(shù)源碼為“光盤(pán)\Linux-system\device-tree-xlnx\src\device-tree-xlnx-[Git 系列號(hào)]-[版本號(hào)].tar.gz”,其中Git系列號(hào)與版本號(hào)以實(shí)際的為準(zhǔn)。將其解壓到Windows非中文目錄,解壓后安裝包內(nèi)容如下圖所示。
PL端xxx.dtsi設(shè)備樹(shù)文件需要依賴于Xilinx設(shè)備樹(shù)源碼生成。

3 h9 s1 {8 ^; x4 q
點(diǎn)擊Xilinx SDK菜單欄"Xilinx -> Reposistories"。
: M4 y1 t  e7 E8 x" Z7 u! P
在彈出的Xilinx SDK資源庫(kù)配置界面中,點(diǎn)擊"Repositories -> New…",彈出對(duì)話框中選中解壓到非中文路徑下的device-tree-xlnx源碼,點(diǎn)擊“確定”將其添加進(jìn)來(lái)。
( ^- W  P# ^$ l8 ?
添加完device-tree-xlnx設(shè)備樹(shù)源碼如下圖所示,點(diǎn)擊OK完成。

9 m! a! ]: _$ h- b- c8 n
  • 生成PL設(shè)備樹(shù)
    - b5 s' t/ t. `2 U- ~
點(diǎn)擊Xilinx SDK菜單欄"File -> New -> Board Support Package",新建Board Support Package。
: N7 h  r; s! q( `% g0 S
在彈出新建Board Support Package配置界面中,按照下圖默認(rèn)選項(xiàng)配置Project name(BSP包命名),Hardware Platform,CPU,同時(shí)在Board Support Package選項(xiàng)中勾選"device_tree",點(diǎn)擊Finish完成配置。
! r: l* `6 b+ r3 z
在彈出的界面,將dt_overlay的值修改成true,該選項(xiàng)將支持設(shè)備樹(shù)文件的動(dòng)態(tài)加載,如圖所示。

) `% C2 D& K4 G- C( B
點(diǎn)擊OK,完成SoC工程"hw\src\runs\axi_gpio.sdk\device_tree_bsp_0\pl.dtsi"設(shè)備樹(shù)文件修改,如下圖所示。

4 A; e2 e2 M5 I- R: i
  • pl.dtsi文件是PL端使用的IP核對(duì)應(yīng)的設(shè)備樹(shù),我司實(shí)際開(kāi)發(fā)中僅用到此設(shè)備樹(shù)文件;
  • zynq-7000.dtsi文件是Xilinx提供給所有Zynq-7000開(kāi)發(fā)板使用(沒(méi)用到此文件);
  • system.dts根據(jù)開(kāi)發(fā)板上的具體實(shí)現(xiàn),修改設(shè)備樹(shù)使其可正常工作(沒(méi)用到此文件)。​​​​​​​
    , S( {# E9 o. A- q3 D! k
  • 編譯設(shè)備樹(shù), n# W. J: P6 d. N* K4 q
在Ubuntu下新建"/home/tronlong/Zynq/Linux-system/device-tree-xlnx"工作目錄,將前面步驟生成的"hw\src\runs\axi_gpio.sdk\device_tree_bsp_0\pl.dtsi"設(shè)備樹(shù)文件拷貝到該目錄下,如下圖所示:
Host#mkdir -p /home/tronlong/Zynq/Linux-system/device-tree-xlnx
Host#cd/home/tronlong/Zynq/Linux-system/device-tree-xlnx
Host#ls

6 O; Z9 Y/ {2 E3 ^" G
執(zhí)行Linux內(nèi)核編譯時(shí),會(huì)在Linux內(nèi)核源碼"scripts/dtc/"目錄下生成設(shè)備樹(shù)編譯器dtc工具。執(zhí)行如下指令,使用dtc工具編譯pl.dtsi設(shè)備樹(shù)源文件。
編譯完成后將在當(dāng)前目錄下生成dtbo文件,指令中dtc工具路徑以實(shí)際情況為準(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

$ A. [& Y6 l3 a( U) h
  • 動(dòng)態(tài)加載PL程序和設(shè)備樹(shù)2 ]8 k7 r6 s4 ^( v# w' P
開(kāi)發(fā)板上電啟動(dòng)進(jìn)入文件系統(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
1 y9 }5 F2 U4 P& _* L' o3 X
執(zhí)行以下指令在文件系統(tǒng)根目錄下新建configfs目錄及設(shè)備節(jié)點(diǎn),并從"/lib/firmware"目錄下動(dòng)態(tài)加載PL端程序和dtbo文件。
Target#mkdir /configfs- W; V% J; l+ ^. ~
Target#mount -t configfs configfs /configfs
# j5 ?7 N) S6 OTarget#mkdir /configfs/device-tree/overlays/full8 O- n% z+ ^! U. L
Target#echo -n "pl.dtbo" >  /configfs/device-tree/overlays/full/path$ z* l/ r4 H0 ?( [
# m3 L8 k6 F5 i& E/ S( p! M. }0 R
% T3 i# o$ `' l* z5 h
若需要重新加載dtbo文件,執(zhí)行如下指令刪除full目錄,再重新創(chuàng)建,然后再動(dòng)態(tài)加載dtbo文件即可。3 p, Q% ?9 V5 _7 C" E) d
Target#rmdir /configfs/device-tree/overlays/full
3 T  I2 Z! Q5 M4 @) ZTarget# mkdir /configfs/device-tree/overlays/full$ n- w& |$ L& ]9 i5 J  o$ M; ]0 O
Target# echo -n "pl.dtbo" >  /configfs/device-tree/overlays/full/path
7 ?$ I& r! B0 S3 E. B- ~" s
* w' h. i1 k# u
3 X  \: ]" P; F" ~
  • 動(dòng)態(tài)加載多個(gè)設(shè)備樹(shù)3 I5 e$ `. @# h$ |
若按照上面的步驟加載了一個(gè)設(shè)備樹(shù),如果還想加載其他dtbo,可以在"/configfs/device-tree/overlays/"目錄下再任意新建一個(gè)文件夾,然后再加載設(shè)備樹(shù):
Target# mkdir /configfs/device-tree/overlays/pl_dtbo
Target# echo -n “pl.dtbo” > /configfs/device-tree/overlays/pl_dtbo/path
  \6 G! k) v$ G6 U# l0 N
嵌入式DSP、ARM、FPGA多核技術(shù)開(kāi)發(fā),學(xué)習(xí)資料下載:http://site.tronlong.com/pfdownload

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

本版積分規(guī)則


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