PetaLinux 简介第一部分

请注意:此博客使用了工具提示。在看到带下划线的单词的地方,请将鼠标悬停在单词上方查看解释!

引言

此博客面向想要开始使用 PetaLinux、了解其关键工具、概念和功能的任何人。在第一篇博客文章中,我们将介绍如何针对 ZCU102 开发板创建 PetaLinux 工程,以及如何修改镜像。

我会完成本教程中所需的基本步骤,但博客的范围有限。您可以在赛灵思网站上单击这里找到有关PetaLinux 的更多信息。 

什么是 PetaLinux?

PetaLinux 是构建于Yocto Linux 发行版的一组高级命令。PetaLinux 工具让您能够为赛灵思处理器系统定制、构建和部署嵌入式 Linux 解决方案/Linux 镜像。此工具专为提高设计效率而量身定制,并可与赛灵思硬件设计工具(如 Vivado)一起使用,以便于轻松地开发面向 Zynq® UltraScale+™ MPSoC、Zynq®-7000 SoC 和 MicroBlaze™ 的 Linux 系统。

简单说来,它是一组简化的命令,可用于快速轻松地为赛灵思开发板制作定制的 Linux 系统/镜像!

PetaLinux 设计流程:

PetaLinux 设计流程如下所示。本教程主要讲解图中所示的 1-4 部分内容。我假设您已在系统上安装并设置了 PetaLinux 工具,但如果还没有安装和设置,则可以单击这里阅读“入门指南”。

在此博客中,我就不对通常在 SDK 中完成的“软件设置和启动程序”部分做详细介绍了。在运行此博客提供的 Tcl 脚本时,该部分会自动完成。

步骤 1:创建硬件平台

注意:您可以使用此博客文章提供的预先构建的 HDF 文件跳过此步骤。

背景:

本节主要介绍使用 Vivado 2018.3 为电路板创建定制硬件时需遵循的步骤。从 Vivado,我们将输出硬件描述文件 (HDF)。

为了为电路板构建目标 PetaLinux 工程,PetaLinux 工具需要了解电路板上的底层硬件系统。HDF 文件对电路板的硬件架构进行了描述。如果要构建 PetaLinux 工程,则必须执行此操作,以便生成的镜像可以在打开电源启动时正确地配置电路板。

为了加快设计进程,本博客附带了一个 Tcl 脚本。在 Vivado 中运行时,Tcl 脚本将执行以下操作:

  • 为原理图创建输出产品
  • 创建硬件描述语言 (HDL) 封装器
  • 生成比特流
  • 将硬件导出到 SDK 以创建硬件描述语言 (HDF) 文件
  • 步骤

    下载此博客附带的 Tcl 脚本。该脚本提供有用于在 Vivado 2018.3 中创建和构建硬件的指令列表。

    启动 Vivado 2018.3。

    使用 GUI 底部 Tcl 提示符中的 cd 命令将目录变更为保存 Tcl 脚本的目录:

    接下来使用 source 命令运行脚本:

    这随即会创建如下所示的硬件原理图。

    该原理图展示了我们的 Zynq UltraScale+ 电路板上的底层架构:

    另外,如果您不想使用 Tcl 脚本并且对 Vivado 很熟悉,则可以参考上面的原理图手动创建设计。如果要使用早于 2018.3 的 Vivado 版本,则必须手动创建原理图。

    步骤 2:创建 PetaLinux 项目

    背景:

    在此步骤中,我们将使用上一步中创建的 HDF 文件来创建基本的 PetaLinux 工程。

    这些步骤在使用 Linux OS 的计算机上运行。由于我用的是 Windows 系统,我用的是安装了 Linux OS 和 PetaLinux 2018.3 的虚拟机。

    有两个源可用来创建 PetaLinux 工程、BSP 和模板工程。

    1. BSP
    BSP 包含一些预先构建的文件,可用来加快开发过程。它只能与标准的赛灵思开发板一起使用,因为它包含对电路板底层架构进行描述的 HDF 文件。

    因为它包含 HDF 文件,所以,如果使用此方法,即可跳过上面提到的步骤 1。总的来说,它包含以下内容:

  • PetaLinux 工程和工作区
  • 硬件工程、HDF 和比特流
  • FS-BOOT(如果使用的是 MicroBlaze)、ATF(在使用 Zynq UltraScale+ 的情况下为 bl31)、Linux、U-Boot、pmufw (Zynq UltraScale+)、rootfs、dtb(设备树 blob)、BOOT.bin 等的预建镜像
  • 可在这里找到适用于不同电路板的各种 BSP。

    要使用 BSP 创建 PetaLinux 工程,请在运行 PetaLinux 的 Linux 终端使用以下命令:
    petalinux-create -t project -s

    2. 模板工程
    在本教程中,我们将使用 ZynqMP 的模板工程来创建 PetaLinux 工程。如果您有定制的赛灵思电路板,则必须使用模板工程,但也可以与标准的赛灵思开发板一起使用。BSP 不能与定制电路板一起使用,因为它包含仅描述标准赛灵思开发板架构的 HDF。

    步骤

    在运行 PetaLinux 的 Linux 中打开终端。

    在 Linux 终端中键入以下命令。此操作将为 zynqMP 创建名为 first_linux 的工程模板。

    petalinux-create --type project --template zynqMP --name first_linux

    接下来,您可以将刚创建的模板与步骤 1 中在 Vivado 中创建的硬件信息组合在一起。

    从 Vivado 导出的 HDF 文件中有一个硬件描述文件 (HDF)。PetaLinux 通过 HSI 实用程序从该文件中提取有关硬件的信息,以及诸如 devicetree 生成器等其他工具中使用的 IP、网络端口和接口等信息。它还将用来填充有关硬件系统的一些系统级工程信息。

    要提取硬件信息,请使用以下命令:
    cd first_linux

    petalinux-config --get-hw-description=

    系统配置窗口随即会出现。这是用户可以对 PetaLinux 工程进行系统级更改的地方。

    也可以使用 petalinux-config 命令打开此配置。由于不需要更改系统级别,您可以退出窗口然后保存。


    步骤 3:编辑镜像

    背景:

    在此步骤中,我们将尝试修改上一步中由 PetaLinux 工具创建的标准 PetaLinux 工程。

    PetaLinux 使用配方 (recipe) 来执行任务。例如,如果您想生成一个 devicetree,通常需要完成一系列不同的步骤(下载源代码、导入 HDF 文件......等)。这些步骤可以组合在一起,并作为 PetaLinux 中的单个‘devicetree’配方来运行。

    这些配方是通过 Bitbake 构建的。它会检查各个配方是否相互依赖或依赖于其他任务、是否能恰当地分配构建任务。用户可以通过 conf 文件夹中 local.conf 文件将信息传递给 Bitbake。

    PetaLinux 配方还会被组织成图层 (layer)。

    许多标准配方用于在 PetaLinux 中创建镜像。但是,如果要自定义镜像,则无法直接修改配方或 PetaLinux 构建目录。

    这是因为,由于工具流程,在每次重建工程时都会覆盖配方和目录,因此任何更改都会丢失。相反,您必须创建一个叫作‘recipe append’的东西。这只是一个文件(内含对标准配方的所有修改请求)。系统会在构建时检查‘recipe appends’并用它们来修改镜像,如下图所示:

    步骤

    现在您已经了解了背景信息,那我们来尝试修改我们的镜像的一部分,Bootloader (FSBL) 的第一阶段。

    1.在下方创建文件结构。在上一步中构建 PetaLinux 工程后,应该已经在根文件夹中创建了 project-spec、meta-user 和 recipies-bsp 文件夹。

    注意:meta-user 层是所有用户特定更改的占位符。您可以在此层中添加自己的 bbappend 和配置文件。

    2. 将 fsbl_%.bbappend 附加文件(在“
    \project-spec\meta-plnx-generated\recipes-bsp\fsbl”)复制到新创建的‘fsbl’文件夹中。如下所示,‘fsbl’文件夹现在包含一个 files 文件夹和 fsbl_%.bbappend 文件。

    注意:包含原始 fsbl_%.bbappend 文件的 meta-plnx-generated 的层包含所有组件的所有 bbappend 和配置片段 (cgf)。该层中的所有文件均由基于 HDF 和用户配置生成的工具。由于每次构建时都会覆盖此文件夹中的所有文件,因此我们无法直接对此图层进行任何更改。这就是我们将 meta-user 文件移动到 meta-user 层的原因。

    3.使用以下内容更新 fsbl_%.bbappend 文件。

    注意:需要通过将补丁文件名添加到 SRC_URI_append 变量的方式来提示 fsbl_%.bbappend 使用补丁文件。补丁文件的位置由 FILESEXTRAPATH_prepend 变量给出。您可以通过使用以下值更新 YAML_COMPILER_FLAGS_append 变量的方式来打开调试。
    #Force to use embeddedsw repo
    EXTERNALXSCTsrc=""
    EXTERNALXSCTSRC_BUILD = ""

    #Patch FSBL
    SRC_URI_append += " file://0001_fsbl_patch.patch"
    FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

    #Enable FSBL DEBUG
    YAML_COMPILER_FLAGS_append = " -DFSBL_DEBUG_INFO -DXPS_BOARD_ZCU102"

    4.将 0001_fsbl_patch.patch 从 fsbl_patch 文件夹(从附加到此博客的 zip 文件)添加到‘files’文件夹,这样它就是 fsbl_%.bbappend 文件下的一层了。它会用“Hello Linux PDC” printf 语句更新源代码。

    5.创建 FSBL 时,bbappend 文件中的内容将被用来修改构建目录中的 FSBL 配方。要创建 FSBL 并应用修改,可以使用以下命令:

    petalinux-config -c bootloader

    6.要验证是否已正确应用修补程序:

    在 2018.3 及以上的版本中:

    将对 tmp 文件夹中的文件进行更改。这是您的“Build Directory”。要查找 tmp 文件夹的位置,请打开配置窗口:
    petalinux-config

    菜单选项卡打开后,转到 Yocto Settings -> TMPDIR 目录,然后复制显示的位置。

    退出设置。您需要在 TMPDIR 中搜索名为 xfsbl_hooks.c 的文件,然后打开这个文件:
    find /tmp/ -name xfsbl_hooks.c

    复制终端中显示的位置。您可以使用‘gedit’命令打开文件:
    gedit /tmp//

    然后在第 96 行,您应该会看到一个 print 语句。

    在 2018.2 和更早版本中:

    打开
    /components/plnx_workspace/fsbl/src/xfsbl_hooks.c。这是 2018.2 及更早版本的 FSBL 的“Build Directory”。然后在 xfsbl_hooks.c 的第 96 行,您应该会看到那个 print 语句。

    如果您看到那个 print 语句,那么干得漂亮,您已经成功地为 FSBL 创建了一个追加配方!

    注意:如果要对 FSBL 进行进一步更改,建议您首先使用以下命令清除构建目录中现有的 FSBL (如果有的话)。

    只有 2018.2 及更早的版本才需要先使用 rm 命令删除 plnx_workspace 目录。

    rm -rf components/plnx_workspace

    petalinux-build -x mrproper

    最新文章

    最新文章