跳转到主要内容

创建 Vitis 加速平台第 2 部分:在 PetaLinux 中为加速平台创建软件工程

作者:Stephen MacMahon,来源:<span id="profileBt"><a href="https://forums.xilinx.com/t5/Xilinx-%E4%BA%A7%E5%93%81%E8%AE%BE%E8%AE%A…; 赛灵思中文社区论坛</a></span>

注意:本文内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途。

这是《创建 Vitis 加速平台》系列的第 2 篇博文。在前文中,我们讲解了如何创建硬件以及如何通过 XSA 将元数据 (metadata) 传递给 Vitis™。

在本文中,我们将讲解如何使用此 XSA 以及如何创建在目标平台上实现设计加速所需的软件镜像。

您可通过下列链接查看其它各部分:
<p align="left">第 1 部分:<a href="https://forums.xilinx.com/t5/Xilinx-%E4%BA%A7%E5%93%81%E8%AE%BE%E8%AE%A…; target="_self">在 Vivado 中为加速平台创建硬件工程</a></p>
<p align="left">第 3 部分:<a href="https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/Creating-…; target="_self">在 Vitis 中封装加速平台</a> </p>
<p align="left">第 4 部分:<a href="https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/Creating-…; target="_self">在 Vitis 中测试定制加速平台</a> </p>

<strong>引言:</strong>

熟悉 OpenCL 的用户可能对“内核 (kernel)”一词已耳熟能详,在 OpenCL 中执行功能的位置即被称为“内核”。

在 Vitis 加速流程中也使用同样的命名法。但在其中使用 Xilinx Runtime (XRT) API 来执行内核。

XRT 基于 Linux 并在 x86 或开发板(AArch64 或 Arm)上运行。XRT 的功能与用于其执行的架构彼此独立,即,它并不知晓自己是在 x86 上执行还是在开发板(AArch64 或 Arm)上执行。

但对于边缘(AArch64 或 Arm)平台,我们需要添加 ZOCL 驱动。ZOCL 驱动用于为每个内核分配资源。在本文中,我们将讲解如何向全新或现有 PetaLinux 工程添加 XRT 和 ZOCL。

向 PetaLinux 工程添加 XRT:
<pre>petalinux-create -t project --template zynqMP -n zcu104_base_sw
cd zcu104_base_sw
petalinux-config --get-hw-description=<path to XSA>
Select DTG Settings -&gt; (zcu104-revc) MACHINE_NAME</pre>

打开 project-spec/meta-user/conf/user-rootfsconfig,并添加如下内容:
<pre>CONFIG_xrt
CONFIG_xrt-dev
CONFIG_zocl
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv</pre>
<pre>petalinux-config -c rootfs
User Packages, and select all here</pre>

下一步,将 zocl 驱动节点添加到 system-user.dtsi。
<pre>/include/ "system-conf.dtsi"
/{
};

&axi_intc_0 {
xlnx,kind-of-intr = &lt;0x0&gt;;
xlnx,num-intr-inputs = &lt;0x20&gt;;
};

&amba {
zyxclmm_drm {
compatible = "xlnx,zocl";
status = "okay";
interrupt-parent = &lt;&axi_intc_0&gt;;
interrupts = &lt;0 4&gt;,&lt;1 4&gt;, &lt;2 4&gt;, 4&gt;,
&lt;4 4&gt;, &lt;5 4&gt;, &lt;6 4&gt;, &lt;7 4&gt;,
&lt;8 4&gt;, &lt;9 4&gt;, &lt;10 4&gt;, &lt;11 4&gt;,
&lt;12 4&gt;, &lt;13 4&gt;, &lt;14 4&gt;,&lt;15 4&gt;,
&lt;16 4&gt;, &lt;17 4&gt;, &lt;18 4&gt;, &lt;19 4&gt;,
&lt;20 4&gt;, &lt;21 4&gt;, &lt;22 4&gt;, &lt;23 4&gt;,
&lt;24 4&gt;, &lt;25 4&gt;, &lt;26 4&gt;, &lt;27 4&gt;,
&lt;28 4&gt;, &lt;29 4&gt;, &lt;30 4&gt;, &lt;31 4&gt;;
};
};</pre>

然后,运行以下命令:
<pre>petalinux-build
cd images/linux
petalinux-build --sdk
petalinux-package --sysroot</pre>

完整性检查:
在封装平台之前,有必要执行完整性检查,以确保已将 XRT 和 ZOCL 添加到 rootfs 中。

方法是在板上启动 Linux 镜像:
<pre>cd images/linux
petalinux-package --boot --fpga --u-boot</pre>

将以下文件置于启动器件上,然后启动
• image.ub
• BOOT.BIN
• boot.scr

验证 XRT 库:
在 /usr/lib 目录中对 XRT 库执行 grep 操作:
<pre>ls /usr/lib | grep libxrt_core</pre>
<center><img src="" alt=""></center>

针对 libxilinxopencl 重复此操作:
<pre>ls /usr/lib | grep libxilinxopencl</pre>
<center><img src="" alt=""></center>

验证 ZOCL DT 节点:
列出 amba 下的所有节点
<pre>ls /sys/devices/platform/amba</pre>

<center><img src="" alt=""></center>

至此大功告成。

这样所得到的 Linux 镜像中已包含了 XRT 支持,并且针对开发板已启用该支持。不仅如此,我们已生成了 Vitis 中执行交叉编译所需的 sysroot。

如果您计划设置一系列定制平台用于相同架构,那么只需为每个版本创建 1 个 sysroot 即可(例如,2020.1)。

如需了解后续步骤,请参阅本系列博客的第 3 部分:在 Vitis 中封装加速平台