作者:Aoifem,AMD工程师;来源:AMD开发者社区
简介
此博客是 PetaLinux 简介 - 第 1 部分的续篇。它面向想要开始使用 PetaLinux 以及希望了解其关键工具、概念和功能的任何用户。在第一篇博客中,我们介绍了如何创建 PetaLinux 工程以及如何修改镜像。在这第二篇博客中,我们将在“第 1 部分”中创建的工程的基础上,继续介绍如何构建系统镜像并在 Zynq UltraScale+™ ZCU102 评估套件上启动该镜像。
我将全程完成本教程中所需的基本步骤,但博客的篇幅有限,不可能面面俱到。您可以在 AMD 网站(单击此处)上找到有关 PetaLinux 的更多信息。
PetaLinux 设计流程:
在第一篇博客中,我们完成了以下红色虚线框中的第 1 部分。我们学习了如何创建 PetaLinux 工程和修改镜像。
在本教程中,我们将构建镜像并将其加载到开发板上(下图中的第 2 和第 3 部分)。然后,我们将测试开发板,确定是否按预期实现了相应的配置。

步骤 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 – 封装文件
为了使开发板能够正常运行,需要将上一步中构建的关键文件封装到可启动镜像中(在本例中为 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 – 在 ZCU102 评估板上启动 Linux:
在本章节中,我们将了解如何将 Petalinux 工程文件加载到 ZCU102 评估板上。
我们的开发板需要两个文件才能正常工作:BOOT.bin 文件和 image.ub 文件。
过程:
将 BOOT.bin 和 image.ub(位于 <project root>/images/linux 中)从您的计算机复制到 SD 卡上,然后将该卡插入 ZCU102 评估板上的 SD 卡槽中。如果未完成以上步骤,可使用这篇博客随附的镜像和启动文件。
调整 ZCU102 评估板上的启动模式管脚(开关 SW6),将其设为 SD 模式。如需了解有关 ZCU102 评估板及其设置方法的更多信息,请参阅用户指南(单击此处)。


将 UART 从 ZCU102 连接到计算机,这样您就可以看到开发板的输出。
给开发板上电。
在计算机上打开终端通信软件(如 TeraTerm)以查看开发板的输出。
如果您不确定如何设置开发板,该用户指南中对此进行了更为详细的说明。
您应该可以在终端输出中看到如以下截屏所示的内容:
FSBL 应用(带调试)执行
ATF(ARM 可信固件)执行
U-Boot 执行、加载 image.ub 并执行
内核启动
注释:默认的登录/密码为 root

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

为了检查开发板的配置是否正确,在此步骤中,我们将手动测试开发板上的 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)

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

如果看到 LED 点亮然后熄灭,那么恭喜!您的 PetaLinux 工程目前正在开发板上运行,并且配置正确无误。
如果希望继续拓展 PetaLinux 知识,请随时探索 AMD 网站,其中包含大量有关 PetaLinux 的优秀示例和文章。