跳转到主要内容
--## 电子创新网图库均出自电子创新网,版权归属电子创新网,欢迎其他网站、自媒体使用,使用时请注明“图片来自电子创新网图库”,不过本图库图片仅限于网络文章使用,不得用于其他用途,否则我们保留追诉侵权的权利。 ##--

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
judy 提交于

作者:Aoifem,AMD工程师;来源:AMD开发者社区

简介

此博客是 PetaLinux 简介 - 第 1 部分的续篇。它面向想要开始使用 PetaLinux 以及希望了解其关键工具、概念和功能的任何用户。在第一篇博客中,我们介绍了如何创建 PetaLinux 工程以及如何修改镜像。在这第二篇博客中,我们将在“第 1 部分”中创建的工程的基础上,继续介绍如何构建系统镜像并在 Zynq UltraScale+™ ZCU102 评估套件上启动该镜像。

我将全程完成本教程中所需的基本步骤,但博客的篇幅有限,不可能面面俱到。您可以在 AMD 网站(单击此处)上找到有关 PetaLinux 的更多信息。 

PetaLinux 设计流程:

在第一篇博客中,我们完成了以下红色虚线框中的第 1 部分。我们学习了如何创建 PetaLinux 工程和修改镜像。

在本教程中,我们将构建镜像并将其加载到开发板上(下图中的第 2 和第 3 部分)。然后,我们将测试开发板,确定是否按预期实现了相应的配置。 

1.png

步骤 1 – 构建镜像:

过程:

在此步骤中,我们将构建镜像,以便将其转换为开发板可以运行和理解的形式。如果您想要跳过此步骤,或者尚未完成“PetaLinux 简介 - 第 1 部分”,可以下载本博客随附的已构建完成的文件。

只需使用一条命令即可构建系统。

在 Linux 终端上,使用 cd 命令切换到工程目录。

使用以下命令构建镜像:

petalinux-build

 解释:

1) 运行的命令:

petalinux-build 命令用于自动执行一系列步骤(如下所列),以简化用户的构建过程。

但是,也可以手动执行这些步骤。如果您愿意,可以按以下顺序逐个执行这些步骤,而不使用上述构建命令。

步骤 1:

petalinux-build -x bootloader

创建第一阶段启动加载程序 (FSBL)。FSBL 将配置处理子系统,加载 PL,然后移交给辅助启动加载程序 (U-Boot)。

步骤 2:

petalinux-build -x pmufwls

构建可编程管理单元固件 (PMUFW)。PMUFW 用于控制系统内资源的上电与监控。

步骤 3:

petalinux-build -x arm-trusted-firmware

在这个步骤中将构建 ARM 可信固件 (ATF)。ATF 为 ARMv8 架构提供对安全软件的引用。

步骤 4:

petalinux-build -x device-tree

在这个步骤中将构建设备树。设备树是使用设备树生成器 (Device Tree Generator) 创建的,该工具是基于 Tcl 的工具,使用 HSI 实用工具来创建设备树节点。

DTG 内置于 PetaLinux 中。PetaLinux 使用硬件描述文件 (HDF) 作为 DTG 的输入。HDF 会向 DTG 描述硬件。如果未提供 HDF,则 PetaLinux 将使用基于模板的默认设置(在本例中为 ZynqMP)。设备树用于向内核描述硬件。

步骤 5:

petalinux-build -x u-boot

在这个步骤中将构建 U-Boot。U-Boot 是用于启动内核的开源应用。PetaLinux 将使用 U-Boot 的特定分支(版本),其中包含有关 AMD 开发板的附加信息以及 defconfig 和设备树信息。

用户也可以使用 petalinux-build -x <component> 命令自行构建各个组件(例如设备树)。

2) 添加的文件:

petalinux-build 命令完成后,以下文件将被添加到 <project root>/images/linux 文件夹内:

  • image.ub

    • 请注意 .ub 扩展名。U-Boot 工具中有一个 mkimage 实用工具,它会将头文件信息添加到 U-Boot 应用在内核启动过程中使用的内核镜像中。

  • zynqmp_fsbl.elf

  • pmu.elf(或者在更高版本的 Petalinux 中则会添加 pmufw.elf)

  • u-boot.elf

  • bl31.elf(即 ATF)

  • design_1_wrapper.bit(或者在更高版本的 PetaLinux 中则会添加 system.bit)

2.png

步骤 2 – 封装文件

为了使开发板能够正常运行,需要将上一步中构建的关键文件封装到可启动镜像中(在本例中为 SD 镜像)。PetaLinux 包含一条 petalinux-package 命令,它使用 bootgen 实用工具来创建 SD 启动镜像。  

如果您想要跳过此步骤,或者尚未完成“PetaLinux 简介 - 第 1 部分”,可以下载本博客随附的文件。

cd images/linux
petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga system.bit --u-boot

或者

petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga design_1_wrapper.bit --u-boot

3.png

步骤 3 – 在 ZCU102 评估板上启动 Linux:

在本章节中,我们将了解如何将 Petalinux 工程文件加载到 ZCU102 评估板上。

我们的开发板需要两个文件才能正常工作:BOOT.bin 文件和 image.ub 文件。

过程:

将 BOOT.bin 和 image.ub(位于 <project root>/images/linux 中)从您的计算机复制到 SD 卡上,然后将该卡插入 ZCU102 评估板上的 SD 卡槽中。如果未完成以上步骤,可使用这篇博客随附的镜像和启动文件。

调整 ZCU102 评估板上的启动模式管脚(开关 SW6),将其设为 SD 模式。如需了解有关 ZCU102 评估板及其设置方法的更多信息,请参阅用户指南(单击此处)。

4.png

5.jpg

将 UART 从 ZCU102 连接到计算机,这样您就可以看到开发板的输出。

给开发板上电。

在计算机上打开终端通信软件(如 TeraTerm)以查看开发板的输出。

如果您不确定如何设置开发板,该用户指南中对此进行了更为详细的说明。 

您应该可以在终端输出中看到如以下截屏所示的内容:

  • FSBL 应用(带调试)执行

  • ATF(ARM 可信固件)执行

  • U-Boot 执行、加载 image.ub 并执行

  • 内核启动

注释:默认的登录/密码为 root

6.png

步骤 4 - 探索内核

在“PetaLinux 简介 - 第 1 部分”中,我们在 Verilog 中设计了硬件,如下图所示。由于我们针对 Zynq UltraScale+ PS 使用了预定义的设置,因此已在 zynq_ultra_ps_e_0 IP 中启用 PS GPIO(如下面的绿框中所示)。

我们在硬件中添加了 AXI GPIO 和 LED,如下图中的红框所示。

7.png

为了检查开发板的配置是否正确,在此步骤中,我们将手动测试开发板上的 LED。

过程:

1) 找到 AXI GPIO 地址:

首先,我们需要找到 AXI GPIO 的地址,才能向 LED 发送信号。  

在 Linux 控制台中,从根目录切换到 GPIO 目录:

 cd /sys/class/gpio/

打开此目录后,您可以使用 ls 命令来查看标记为“gpiochipXXXX”的一些 GPIO 芯片:

ls /sys/class/gpio

您将看到以下输出:

export  gpiochip330  gpiochip504  unexport

但我们如何确定这些芯片中哪个与 AXI GPIO 相关联呢?  

要进行检查,我们需要查看 GPIO 芯片的标签:

cat /sys/class/gpio/gpiochip330/label

此命令将输出以下内容:

zynqmp_gpio

这意味着它是 Zynq MP 的 GPIO 芯片,不是我们要寻找的芯片。

接下来我们查看第二个芯片的标签:

cat /sys/class/gpio/gpiochip504/label

我们会获得以下输出:

/amba_pl@0/gpio@a0000000

AMBA_PL 名称告诉我们这是 AXI GPIO 芯片。其后的数字是它的地址。

这就是我们要找的 GPIO 芯片。我们现在知道,所需的基本管脚号是 504,偏移地址为 0。 

2) 开关 LED

要开关 AXI GPIO 管脚 0,请在终端通信软件(例如 TeraTerm)中使用以下命令。

管脚的计算公式如下:

base_pin + offset 或 504 + 0 = 504。 

我们将使用 Sysfs 命令控制 LED。Sysfs 是一个由 Linux 内核提供的伪文件系统。如需了解有关这些命令的更多信息,请参阅 Sysfs

在终端通信软件(例如 TeraTerm)中输入以下命令:

echo 504 > /sys/class/gpio/export (asks the kernel to export control of GPIO 504 to userspace)echo out > /sys/class/gpio/gpio504/direction (initialises GPIO value as low)echo 1 > /sys/class/gpio/gpio504/value (LED Turns ON)echo 0 > /sys/class/gpio/gpio504/value (LED Turns OFF)echo 504 > /sys/class/gpio/unexport (unexport control of GPIO 504 from userspace)

8.png

您应该看到开发板上的 LED (DS38) 点亮,然后熄灭。

9.jpg

如果看到 LED 点亮然后熄灭,那么恭喜!您的 PetaLinux 工程目前正在开发板上运行,并且配置正确无误。

如果希望继续拓展 PetaLinux 知识,请随时探索 AMD 网站,其中包含大量有关 PetaLinux 的优秀示例和文章。  

精彩推荐

2026英伟达GTC大会专题

CES 2026(国际消费类电子产品展览会)专题

第四届南渡江智慧医疗与康复产业高峰论坛

第十五届松山湖中国IC创新高峰论坛

第四届滴水湖中国RISC-V产业论坛

Recent comments

  • 1873774516_516738
  • 2460440665_516737
  • 1457585548_516736
  • 780289498_516735
  • 2283262460_516734