电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1183|回复: 0
收起左侧

生成PL设备树及动态加载PL程序和设备树

[复制链接]

678

主题

902

帖子

8293

积分

高级会员

Rank: 5Rank: 5

积分
8293
发表于 2020-7-6 11:51:37 | 显示全部楼层 |阅读模式

' Q. }. v+ H6 k4 m& e0 k0 U) y
  • 实验说明5 J' n3 j* \: v6 \1 l# F) r
操作环境:
  • Windows 7/10 64bit
  • Xilinx Vivado 2017.4
  • Ubuntu 14.04, V1 y: P4 y7 f9 d9 i0 Y; h7 U7 F) ]' ^

; Y8 m# p1 M; @1 N7 ~
表 1
开发板型号
是否支持本实验
TLZ7x-EasyEVM
支持
TLZ7xH-EVM
支持
  r9 T- V5 Y5 m' q8 _* [
在运行Linux系统下,对于Zynq PL端的开发,可以通过动态加载PL端程序、PL设备树的方法对其进行配置。PL端设备树文件xxx.dtsi的生成,需要依赖于Vivado工程的xxx.hdf硬件描述文件和Xilinx设备树源码。
本文以光盘"All-Programmable-SoC-demos\tl-axi-gpio-led-demo"例程为例,演示生成、编译PL端设备树文件,以及动态加载PL端程序和PL设备树的方法。
  • 生成PL端设备树文件
  • 导出Vivado工程硬件描述文件; {7 a# j8 a! I5 M) _+ S
参照《基于TcL脚本生成Vivado工程及编译》文档,生成Vivado工程并对其进行编译,后面将由Vivado工程编译生成的xxx.bin文件进行动态加载。
点击Vivado的菜单栏"File -> Export -> Export Hardware…",弹出对话框中点击OK,导出tl-axi-gpio-led-demo例程的xxx.hdf硬件描述文件。
' S2 |' X! J+ d( M4 ?$ \3 ?
6 S( \, |- K8 C' G" C! ]
导出完成后,将在"All-Programmable-SoC-demos\tl-axi-gpio-led-demo\"工程目录下生成"\hw\src\runs\axi_gpio.sdk\axi_gpio_wrapper.hdf"文件,同时TcL控制台打印如下信息。
& t9 Q  v  Z2 a7 `: O5 e3 [
点击Vivado的菜单栏"File -> Launch SDK",使用Xilinx SDK加载xsdk工程。在弹出对话框中点击OK,打开xsdk工程如下图所示。

* G+ _, H6 O8 L/ q* F' x* \
9 C. P4 u' k2 ^0 S

7 o5 U5 F$ t( t/ M# C
  • 导入device-tree-xlnx) m" ?& ^) I- {1 S
Xilinx设备树源码为“光盘\Linux-system\device-tree-xlnx\src\device-tree-xlnx-[Git 系列号]-[版本号].tar.gz”,其中Git系列号与版本号以实际的为准。将其解压到Windows非中文目录,解压后安装包内容如下图所示。
PL端xxx.dtsi设备树文件需要依赖于Xilinx设备树源码生成。

- O/ ?+ K0 ?: Z2 @
点击Xilinx SDK菜单栏"Xilinx -> Reposistories"。

% w9 U; h" C  \; \. x5 T
在弹出的Xilinx SDK资源库配置界面中,点击"Repositories -> New…",弹出对话框中选中解压到非中文路径下的device-tree-xlnx源码,点击“确定”将其添加进来。

# B& G; [) V; v
添加完device-tree-xlnx设备树源码如下图所示,点击OK完成。

/ O, o/ j6 n7 L6 S3 m
  • 生成PL设备树
      C, c3 i4 S1 ]+ L  j" p
点击Xilinx SDK菜单栏"File -> New -> Board Support Package",新建Board Support Package。

' ]) K6 A6 B; v2 j2 s% |
在弹出新建Board Support Package配置界面中,按照下图默认选项配置Project name(BSP包命名),Hardware Platform,CPU,同时在Board Support Package选项中勾选"device_tree",点击Finish完成配置。
' R- h! @. p4 n5 J/ {+ E
在弹出的界面,将dt_overlay的值修改成true,该选项将支持设备树文件的动态加载,如图所示。
  M5 M8 R/ V2 J" X# q
点击OK,完成SoC工程"hw\src\runs\axi_gpio.sdk\device_tree_bsp_0\pl.dtsi"设备树文件修改,如下图所示。

, z9 p: M! V0 C0 I, j
  • pl.dtsi文件是PL端使用的IP核对应的设备树,我司实际开发中仅用到此设备树文件;
  • zynq-7000.dtsi文件是Xilinx提供给所有Zynq-7000开发板使用(没用到此文件);
  • system.dts根据开发板上的具体实现,修改设备树使其可正常工作(没用到此文件)。​​​​​​​
    5 s/ ]" P& t8 h2 r0 |5 K. g% k# w. J7 l
  • 编译设备树
    ! C5 M; Q+ L1 f2 v- ]7 K5 j4 y
在Ubuntu下新建"/home/tronlong/Zynq/Linux-system/device-tree-xlnx"工作目录,将前面步骤生成的"hw\src\runs\axi_gpio.sdk\device_tree_bsp_0\pl.dtsi"设备树文件拷贝到该目录下,如下图所示:
Host#mkdir -p /home/tronlong/Zynq/Linux-system/device-tree-xlnx
Host#cd/home/tronlong/Zynq/Linux-system/device-tree-xlnx
Host#ls

( f. {; D7 Z5 Y2 a: M4 X( K9 K# x
执行Linux内核编译时,会在Linux内核源码"scripts/dtc/"目录下生成设备树编译器dtc工具。执行如下指令,使用dtc工具编译pl.dtsi设备树源文件。
编译完成后将在当前目录下生成dtbo文件,指令中dtc工具路径以实际情况为准。
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

5 K. T1 l7 q: Y$ z1 J- [9 W
  • 动态加载PL程序和设备树
    ! L/ F+ H! u7 B& o9 q9 M9 Z
开发板上电启动进入文件系统,执行如下指令新建"/lib/firmware"目录。将编译生成的dtbo文件,以及由Vivado工程编译生成的xxx.bin文件复制到"/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
6 `8 x6 J! p# Q
执行以下指令在文件系统根目录下新建configfs目录及设备节点,并从"/lib/firmware"目录下动态加载PL端程序和dtbo文件。
Target#mkdir /configfs
5 T) s% n* U8 P9 E2 t4 cTarget#mount -t configfs configfs /configfs3 j3 c( e0 D* q: H+ i1 z; B
Target#mkdir /configfs/device-tree/overlays/full/ x" B; q& Y3 p* A* }- C, {0 q
Target#echo -n "pl.dtbo" >  /configfs/device-tree/overlays/full/path+ ^/ r7 g" b4 X1 m
6 J! |/ ]3 \5 O6 g: ?
: o# r  K2 \2 m& T% ^1 `0 }
若需要重新加载dtbo文件,执行如下指令删除full目录,再重新创建,然后再动态加载dtbo文件即可。
% Q2 ~% G8 d( }7 G  u( D, Q! LTarget#rmdir /configfs/device-tree/overlays/full1 {- Z3 C; Y# N% r1 _/ n% x
Target# mkdir /configfs/device-tree/overlays/full
6 w. r: ?! |! h; M0 k' RTarget# echo -n "pl.dtbo" >  /configfs/device-tree/overlays/full/path
1 `$ R* ?) K" l, G
; A6 I- m5 j1 J* F2 r
+ d1 K& {2 r  f  Y6 H- c3 M
  • 动态加载多个设备树
    ( p  E1 d6 N4 I0 Q
若按照上面的步骤加载了一个设备树,如果还想加载其他dtbo,可以在"/configfs/device-tree/overlays/"目录下再任意新建一个文件夹,然后再加载设备树:
Target# mkdir /configfs/device-tree/overlays/pl_dtbo
Target# echo -n “pl.dtbo” > /configfs/device-tree/overlays/pl_dtbo/path
3 P% H% `1 z" \' F
嵌入式DSP、ARM、FPGA多核技术开发,学习资料下载:http://site.tronlong.com/pfdownload
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条


联系客服 关注微信 下载APP 返回顶部 返回列表