作者:Aoifem,AMD工程師;來源:AMD開發者社區
此博客是 PetaLinux 簡介 - 第 1 部分的續篇。它面向想要開始使用 PetaLinux 以及希望了解其關鍵工具、概念和功能的任何用戶。在第一篇博客中,我們介紹了如何創建 PetaLinux 工程以及如何修改鏡像。在這第二篇博客中,我們將在“第 1 部分”中創建的工程的基礎上,繼續介紹如何構建系統鏡像并在 Zynq UltraScale+? ZCU102 評估套件上啟動該鏡像。
我將全程完成本教程中所需的基本步驟,但博客的篇幅有限,不可能面面俱到。您可以在 AMD 網站上找到有關 PetaLinux 的更多信息。
PetaLinux 設計流程:
在第一篇博客中,我們完成了以下紅色虛線框中的第 1 部分。我們學習了如何創建 PetaLinux 工程和修改鏡像。
在本教程中,我們將構建鏡像并將其加載到開發板上(下圖中的第 2 和第 3 部分)。然后,我們將測試開發板,確定是否按預期實現了相應的配置。

過程:
在此步驟中,我們將構建鏡像,以便將其轉換為開發板可以運行和理解的形式。如果您想要跳過此步驟,或者尚未完成“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)

為了使開發板能夠正常運行,需要將上一步中構建的關鍵文件封裝到可啟動鏡像中(在本例中為 SD 鏡像)。PetaLinux 包含一條 petalinux-package 命令,它使用 bootgen 實用工具來創建 SD 啟動鏡像。
如果您想要跳過此步驟,或者尚未完成“PetaLinux 簡介 - 第 1 部分”,可以下載本博客隨附的文件。
cd images/linuxpetalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga system.bit --u-boot
或者
petalinux-packae --boot --fsbl zynqmp_fsbl.elf --fpga design_1_wrapper.bit --u-boot
在本章節中,我們將了解如何將 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

在“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 的優秀示例和文章。
