91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Zynq UltraScale+ MPSoC平臺上通過JTAG啟動嵌入式Linux鏡像

FPGA技術(shù)江湖 ? 來源:OpenFPGA ? 2026-01-13 11:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下文章來源于OpenFPGA,作者碎碎思

在之前文章中,我們介紹了如何使用 XSCT 工具通過 JTAG 在 Zynq SoC 上啟動嵌入式 Linux 鏡像(從 JTAG 啟動 Zynq-7000 嵌入式 Linux:使用 XSCT 全流程教程)。本文則進一步講解如何在 Zynq UltraScale+ MPSoC 平臺上通過 JTAG 逐步啟動 Linux,并提供了完整的過程與關(guān)鍵命令。只要按步驟操作,即使是復(fù)雜的 Linux 鏡像也能成功通過 JTAG 啟動。

所需條件與工具

要完成 JTAG 啟動,你需要準(zhǔn)備以下內(nèi)容:

支持 JTAG 調(diào)試的 Zynq UltraScale+ MPSoC 板

與目標(biāo)板連接的 JTAG 線纜(例如 SmartLynq / Platform Cable)

安裝了 Xilinx 工具(如 Vitis / SDK)的開發(fā)主機

可用的 Linux 鏡像、設(shè)備樹、ATF、U-Boot 等組件

操作概要(步驟不可改變)

整體流程分為 8 個步驟,每一步都對最終啟動至關(guān)重要:

啟動 XSCT 命令行

配置 FPGA(下載 bitstream)

下載并運行 PMU Firmware

配置處理系統(tǒng)

下載并執(zhí)行第一階段引導(dǎo)加載器(FSBL)

下載第二階段引導(dǎo)加載器(U-Boot)

下載 ARM Trusted Firmware

下載并啟動 Linux 鏡像

1、如何啟動 XSCT

XSCT(Xilinx Software Commandline Tool)用于通過 JTAG 與設(shè)備通信

/Xilinx/Vitis/2021.1/bin/xsct

或者開始菜單里尋找。

啟動后,會進入交互式命令行,等待你輸入各種引導(dǎo)命令。

1124 ~ > /opt/Xilinx/Vitis/2021.1/bin/xsct
****** Xilinx Software Commandline Tool (XSCT) v2021.1
 **** SW Build 3246112 on 2021-06-09-1456
  ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.
xsct%help
Available Help Categories
breakpoints  - Target Breakpoints/Watchpoints.
connections  - Target Connection Management.
device    - Device Configuration System.
download   - Target Download FPGA/BINARY.
hsi      - HSI commands.
ipi      - IPI commands to Versal PMC.
jtag     - JTAG Access.
memory    - Target Memory.
miscellaneous - Miscellaneous.
petalinux   - Petalinux commands.
projects   - Vitis Projects.
registers   - Target Registers.
reset     - Target Reset.
running    - Program Execution.
streams    - Jtag UART.
svf      - SVF Operations.
tfile     - Target File System.
Type"help"followed by above"category"formore details or
help" followed by the keyword "commands" to list all the commands
xsct%

2、連接目標(biāo)設(shè)備

在 XSCT 中使用 connect 命令建立 JTAG 連接,例如:

connect -url tcp::3121

不同 JTAG 線纜的 IP 地址不同:

SmartLynq:通過板上顯示的 IP

SmartLynq(USB 直連):通常是 10.0.0.2

Platform Cable(國內(nèi)常用JTAG):通常是 127.0.0.1

默認(rèn)端口是 3121。

3、列出連到 JTAG 鏈的設(shè)備

連接成功后,可以查看 JTAG 鏈上所有目標(biāo):

xsct% targets                                              
 1 PS TAP
  2 PMU
  3 PL
 4 PSU
  5 RPU (Reset)
    6 Cortex-R5#0(No Power)
    7 Cortex-R5#1(No Power)
  8 APU
    9 Cortex-A53#0(Running)
   10 Cortex-A53#1(Running)
   11 Cortex-A53#2(Running)
   12 Cortex-A53#3(Running)

執(zhí)行命令后看到的列表targets代表連接到 JTAG 鏈的每個設(shè)備。設(shè)備可以是單元、CPU 內(nèi)核、FPGA 等??梢詫γ總€設(shè)備進行管理。有時可能無法在目標(biāo)設(shè)備和 JTAG 電纜之間建立可靠的連接。在這種情況下,應(yīng)該檢查錯誤消息并根據(jù)消息采取相應(yīng)措施。例如,當(dāng)沒有 JTAG 連接或電路板斷電時,將顯示如下所示的錯誤提示。

xsct% targets
 1 whole scan chain (board power off)

最常遇到的問題與使用的 JTAG 頻率有關(guān)。JTAG 鏈路的硬件結(jié)構(gòu)對其最佳頻率有顯著影響。某些物理特性,例如電纜長度、目標(biāo)數(shù)量等,都可能影響合適的 JTAG 頻率。在這種情況下,XSCT 工具會生成一些錯誤消息,指示與目標(biāo)的連接不穩(wěn)定??梢栽谙路娇吹揭恍┦纠?。

xsct% targets
 1 whole scan chain (Unknown device configuration)
xsct% targets
 1 whole scan chain (Unknown IR length)
xsct% targets
 1 whole scan chain (too many devices)

當(dāng)出現(xiàn)此類輸出時,應(yīng)該重新調(diào)整 JTAG 頻率,以建立可靠穩(wěn)定的連接。可以通過調(diào)用jtag frequency -list以下方法查找 JTAG 電纜支持的頻率。然后,可以從列表中選擇合適的頻率。也可以選擇任意頻率,該實用程序會自動處理舍入誤差。

xsct% jtag targets 1
xsct% jtag frequency -list
125000 250000 500000 1000000 2000000 3000000 4000000 6000000 7500000 10000000 12000000 13000000
15000000 20000000 30000000 40000000 50000000 60000000 70000000 80000000 90000000 100000000
xsct% jtag frequency 7500000
7500000
xsct% jtag frequency 7000000
7017543

4、中斷系統(tǒng)

在開始操作之前,CPU必須中斷并重置為初始狀態(tài)。沒有此步驟,將無法管理處理系統(tǒng)。Zynq SoC 中的此步驟有所不同。要重置系統(tǒng):

xsct% targets -set-nocase -filter {name =~"*PSU*"}
xsct% rst
xsct% Info: Cortex-A53#0(target 9) Stopped at 0xffff0000 (Reset Catch)
xsct% targets
 1 PS TAP
  2 PMU
  3 PL
 4* PSU
  5 RPU (Reset)
    6 Cortex-R5#0(No Power)
    7 Cortex-R5#1(No Power)
  8 APU
    9 Cortex-A53#0(Reset Catch, EL3(S)/A64)
   10 Cortex-A53#1(Reset)
   11 Cortex-A53#2(Reset)
   12 Cortex-A53#3(Reset)

5、配置FPGA

由于 Zynq UltraScale+ SoC 實際上是一款 FPGA 芯片,因此需要硬件鏡像才能訪問其底層組件,例如 DDR以太網(wǎng)、串行接口等。通過 JTAG 下載完整的 FPGA 鏡像非常簡單,只需使用fpga以下命令即可。

xsct% targets
 1 PS TAP
  2 PMU
  3 PL
 4* PSU
  5 RPU (Reset)
    6 Cortex-R5#0(No Power)
    7 Cortex-R5#1(No Power)
  8 APU
    9 Cortex-A53#0(Reset Catch, EL3(S)/A64)
   10 Cortex-A53#1(Reset)
   11 Cortex-A53#2(Reset)
   12 Cortex-A53#3(Reset)
xsct% targets -set-nocase -filter {name =~"*PS TAP*"}
xsct% fpga"system.bit"                                  
100%  25MB  1.2MB/s 00:21

下載 FPGA 鏡像會清除現(xiàn)有的 PL 鏡像并將其替換為新鏡像。還可以通過向同一命令提供選項來管理可編程邏輯。按 Enter 鍵help fpga可查看更多信息。目前,將 FPGA 鏡像下載到硬件就足夠了,其余內(nèi)容超出了本教程的范圍。

6、PMU固件

Zynq UltraScale+ SoC 包含一個專用的 MicroBlaze 處理器,用于執(zhí)行平臺管理。PMU 代表平臺管理單元。其主要職責(zé)是在啟動前初始化部分系統(tǒng)組件、管理分配給各個電源島的電源以及處理系統(tǒng)錯誤。固件能夠與運行在處理系統(tǒng)單元 (Processing System Unit) 上的用戶應(yīng)用程序通信。用戶可以創(chuàng)建請求來根據(jù)需要管理平臺。此外,還可以使用 Vitis IDE 修改 PMU 固件。可以參考 Zynq UltraScale+ 的技術(shù)參考手冊(即 UG1085 )來進一步了解 PMU 固件的詳細(xì)信息和使用場景。

如果不禁用處理系統(tǒng)單元 (PSU) 上的某些安全門,就無法訪問位于平臺管理單元 (PMU) 內(nèi)的 MicroBlaze 處理器。因此,我們的第一步是禁用這些安全門。然后,我們將 PMU 固件下載到目標(biāo)處理器并運行它。為了確保安全,我們將重新啟用這些安全門。

xsct% targets -set-nocase -filter {name =~"*PSU*"}                           
xsct% targets                                              
 1 PS TAP
  2 PMU
  3 PL
 4* PSU
  5 RPU (Reset)
    6 Cortex-R5#0(No Power)
    7 Cortex-R5#1(No Power)
  8 APU
    9 Cortex-A53#0(Reset Catch, EL3(S)/A64)
   10 Cortex-A53#1(Reset)
   11 Cortex-A53#2(Reset)
   12 Cortex-A53#3(Reset)
xsct% mask_write 0xFFCA0038 0x1C0 0x1C0
xsct% targets                                              
 1 PS TAP
  2 PMU
   13 MicroBlaze PMU (Sleeping. No clock)
  3 PL
 4* PSU
  5 RPU (Reset)
    6 Cortex-R5#0(No Power)
    7 Cortex-R5#1(No Power)
  8 APU
    9 Cortex-A53#0(Reset Catch, EL3(S)/A64)
   10 Cortex-A53#1(Reset)
   11 Cortex-A53#2(Reset)
   12 Cortex-A53#3(Reset)

禁用安全門后,MicroBlaze 內(nèi)核立即出現(xiàn)在 JTAG 目標(biāo)鏈上。通過獲取處理器的訪問權(quán)限,我們現(xiàn)在可以下載并運行 PMU 固件。

xsct% targets -set-nocase -filter {name =~"*MicroBlaze PMU*"}
xsct% dow"pmufw.elf"                                   
Downloading Program -- pmufw.elf
section, .vectors.reset: 0xffdc0000 - 0xffdc0007
section, .vectors.sw_exception: 0xffdc0008 - 0xffdc000f
section, .vectors.interrupt: 0xffdc0010 - 0xffdc0017
section, .vectors.hw_exception: 0xffdc0020 - 0xffdc0027
section, .text: 0xffdc0050 - 0xffdd1057
section, .rodata: 0xffdd1058 - 0xffdd2287
section, .data: 0xffdd2288 - 0xffdd639b
section, .sdata2: 0xffdd639c - 0xffdd639f
section, .sdata: 0xffdd63a0 - 0xffdd639f
section, .sbss: 0xffdd63a0 - 0xffdd639f
section, .bss: 0xffdd63a0 - 0xffdda0db
section, .srdata: 0xffdda0dc - 0xffdda9f7
section, .stack: 0xffdda9f8 - 0xffddb9f7
section, .xpbr_serv_ext_tbl: 0xffddf6e0 - 0xffddfadf
100%  0MB  0.2MB/s 00:00                                       
Setting PC to Program Start Address 0xffdd0a04
Successfully downloaded pmufw.elf
xsct% Info: MicroBlaze PMU (target 13) Stopped at 0xffdc8534 (Stop)
xsct% con                                                
Info: MicroBlaze PMU (target 13) Running

如果一切順利,我們可以重新啟用安全門,以防止訪問 MicroBlaze PMU,并繼續(xù)進行 PSU 初始化。

xsct% targets -set-nocase -filter {name =~"*PSU*"}
xsct% mask_write 0xFFCA0038 0x1C0 0x0
xsct% targets                                              
 1 PS TAP
  2 PMU
  3 PL
 4* PSU
  5 RPU (Reset)
    6 Cortex-R5#0(No Power)
    7 Cortex-R5#1(No Power)
  8 APU
    9 Cortex-A53#0(Reset Catch, EL3(S)/A64)
   10 Cortex-A53#1(Reset)
   11 Cortex-A53#2(Reset)
   12 Cortex-A53#3(Reset)

7、APU和PSU初始化

在將第一階段引導(dǎo)加載程序下載到應(yīng)用處理器單元 (APU) 之前,必須移除復(fù)位。此外,必須根據(jù)硬件映像(HDF/XSA 文件)初始化處理系統(tǒng)單元。從 Vivado 設(shè)計工具導(dǎo)出的硬件映像中包含一個名為“psu_init.tcl”的 TCL 腳本。以下是執(zhí)行這些步驟的命令。

xsct% targets -set-nocase -filter {name =~"*APU*"}
xsct% targets
 1 PS TAP
  2 PMU
  3 PL
 5 PSU
  6 RPU (Reset)
    7 Cortex-R5#0(No Power)
    8 Cortex-R5#1(No Power)
  9* APU
   10 Cortex-A53#0(Reset Catch, EL3(S)/A64)
   11 Cortex-A53#1(Reset)
   12 Cortex-A53#2(Reset)
   13 Cortex-A53#3(Reset)
xsct% mwr 0xffff0000 0x14000000
xsct% mask_write 0xFD1A0104 0x501 0x0
xsct%sourcepsu_init.tcl
xsct% psu_init

如果電源單元初始化成功,屏幕上將不會顯示任何輸出。完成此步驟后,我們便獲得了對電源單元資源的訪問權(quán)限。

8、第一階段引導(dǎo)加載程序(FSBL)

FSBL 是Zynq UltraScale+ 啟動時在應(yīng)用處理器上運行的第一個程序(實際上是第二個,BootROM 首先運行) 。它負(fù)責(zé)在調(diào)用 SSBL (第二階段引導(dǎo)加載程序)或所需的裸機應(yīng)用程序之前配置硬件并初始化一些組件??梢允褂米詣由傻?FSBL,也可以編寫自己的 FSBL。要下載并運行 FSBL,請調(diào)用以下命令。請注意,F(xiàn)SBL 必須在應(yīng)用處理單元的第一個 Cortex-A53 內(nèi)核上運行。因此,我們需要相應(yīng)地選擇目標(biāo)內(nèi)核。

xsct% targets -set-nocase -filter {name =~"*A53#0*"}
xsct% targets
 1 PS TAP
  2 PMU
  3 PL
 5 PSU
  6 RPU (Reset)
    7 Cortex-R5#0(No Power)
    8 Cortex-R5#1(No Power)
  9 APU
   10* Cortex-A53#0(Reset Catch, EL3(S)/A64)
   11 Cortex-A53#1(Reset)
   12 Cortex-A53#2(Reset)
   13 Cortex-A53#3(Reset)
xsct% dow"zynqmp_fsbl.elf"
Downloading Program -- zynqmp_fsbl.elf
  section, .text: 0xfffc0000 - 0xfffcf88b
  section, .note.gnu.build-id: 0xfffcf88c - 0xfffcf8af
  section, .init: 0xfffcf8c0 - 0xfffcf8f3
  section, .fini: 0xfffcf900 - 0xfffcf933
  section, .rodata: 0xfffcf940 - 0xfffcfe6f
  section, .sys_cfg_data: 0xfffcfe80 - 0xfffd0657
  section, .mmu_tbl0: 0xfffd1000 - 0xfffd100f
  section, .mmu_tbl1: 0xfffd2000 - 0xfffd3fff
  section, .mmu_tbl2: 0xfffd4000 - 0xfffd7fff
  section, .data: 0xfffd8000 - 0xfffd932f
  section, .sbss: 0xfffd9330 - 0xfffd933f
  section, .bss: 0xfffd9340 - 0xfffdb87f
  section, .heap: 0xfffdb880 - 0xfffdbc7f
  section, .stack: 0xfffdbc80 - 0xfffddc7f
  section, .dup_data: 0xfffddc80 - 0xfffdefaf
  section, .handoff_params: 0xfffe9e00 - 0xfffe9e87
  section, .bitstream_buffer: 0xffff0040 - 0xfffffc3f
100%  0MB  0.3MB/s 00:00
Setting PC to Program Start Address 0xfffc0000
Successfully downloaded zynqmp_fsbl.elf
xsct% con
Info: Cortex-A53#0(target 10) Running
xsct% after 4000; stop
Info: Cortex-A53#0(target 10) Stopped at 0xfffce2f0 (External Debug Request)

啟動 FSBL 后,我們讓它運行一段時間完成操作。然后,我們在交接點手動停止它。由于我使用的是定制板,其啟動引腳被硬配置為 QSPI 啟動模式,所以我修改了 FSBL 代碼,強制其使用 JTAG 啟動模式。以下是我的 UART 輸出:

Xilinx Zynq MP First Stage Boot Loader (Modified)
Release 2021.1  Jun 20 2022 - 1015
This FSBL has been modifiedinorder to boot from the JTAG only!
Forcing the Boot Mode as JTAG! Check the xfsbl_initialization.c file.

9、第二階段引導(dǎo)加載程序(U-Boot)

與常規(guī)啟動流程類似,SSBL 遵循 FSBL。由于我們使用的是 PetaLinux 構(gòu)建系統(tǒng)來生成鏡像,因此我們將使用常用的 U-Boot 作為 SSBL 程序。也可以使用不同的引導(dǎo)加載程序,但流程應(yīng)該類似。

U-Boot 需要一個設(shè)備樹二進制文件,因此我們需要在啟動 U-Boot 之前將其加載到內(nèi)存中。該設(shè)備必須下載到內(nèi)存中預(yù)先設(shè)定的地址。在 PetaLinux 項目中,此配置位于名為CONFIG_SUBSYSTEM_UBOOT_DEVICETREE_OFFSET的參數(shù)下??梢栽谖抑暗奈恼轮姓业揭粋€簡單的單行 Bash 命令,可以更快地找到所需的配置。在我的示例中,該地址為0x100000 。請注意,由于該二進制文件不是可執(zhí)行文件,因此我們使用-data選項來下載它。

xsct% targets -set-nocase -filter {name =~"*A53#0*"}
xsct% dow -data"system.dtb"0x100000
100%  0MB  0.2MB/s 00:00
Successfully downloaded system.dtb

U-Boot 現(xiàn)在可以下載到內(nèi)存中了。

xsct% targets -set-nocase -filter {name =~"*A53#0*"}
xsct% dow "u-boot.elf"
Downloading Program -- u-boot.elf
section, .text: 0x08000000 - 0x080001af
section, .efi_runtime: 0x080001b0 - 0x080011bf
section, .text_rest: 0x08001800 - 0x080c8c23
section, .rodata: 0x080c8c28 - 0x080fa111
section, .hash: 0x080fa118 - 0x080fa12f
section, .data: 0x080fa130 - 0x0810863f
section, .got: 0x08108640 - 0x08108647
section, .got.plt: 0x08108648 - 0x0810865f
section, .u_boot_list: 0x08108660 - 0x0810d3f7
section, .efi_runtime_rel: 0x0810d3f8 - 0x0810d5a7
section, .rela.dyn: 0x0810d5a8 - 0x08125877
section, .bss_start: 0x08125878 - 0x08125877
section, .bss: 0x08125880 - 0x0813e3c7
section, .bss_end: 0x0813e3c8 - 0x0813e3c7
100%  1MB  0.3MB/s 00:04
Setting PC to Program Start Address 0x08000000
Successfully downloaded u-boot.elf

PS1:

注意到了嗎?這一步其實有點棘手,而且一旦出錯就很難找出原因。與 FSBL 不同,我們并沒有在將 U-Boot 下載到內(nèi)存后立即啟動它。這是因為 Zynq UltraScale+ 的架構(gòu)與 Zynq SoC 相比,情況要復(fù)雜一些。Zynq UltraScale+ 的應(yīng)用處理器基于 ARMv8 架構(gòu),而 Zynq 的應(yīng)用處理器則基于 ARMv7 架構(gòu)。

PS2:

為了符合 ARVv8 拓?fù)浣Y(jié)構(gòu),Linux 內(nèi)核啟動時運行在 ARM 異常級別 1/0。在該異常級別下,Linux 內(nèi)核對系統(tǒng)或安全關(guān)鍵寄存器的訪問受到硬件限制。Linux 與這些受限設(shè)備的所有交互都通過運行在異常級別 3 的 ARM 可信固件 (ATF) 進行路由。如果沒有 ATF, Linux 鏡像可能根本無法啟動。

10、ARM 可信固件 (ATF)

如前所述,訪問特權(quán)區(qū)域需要 ARM 可信固件 (ATF)。ATF 作為代理,代表操作系統(tǒng)修改系統(tǒng)關(guān)鍵設(shè)置。為了使操作系統(tǒng)(在本例中為 Linux)能夠訪問這些資源,必須對其進行修改,以支持 ATF 導(dǎo)出到操作系統(tǒng)自身的安全監(jiān)控調(diào)用。這些步驟超出了本教程的范圍。可以參考Zynq UltraScale+ 技術(shù)參考手冊 UG1085 的第 16 章“16-System Protection Units”。接下來,我們將 ATF 下載到內(nèi)存中。

xsct% targets -set-nocase -filter {name =~"*A53#0*"}
xsct% targets
 1 PS TAP
  2 PMU
  3 PL
 5 PSU
  6 RPU
    7 Cortex-R5#0(No Power)
    8 Cortex-R5#1(No Power)
  9 APU
   10* Cortex-A53#0(External Debug Request, EL3(S)/A64)
   11 Cortex-A53#1(Reset)
   12 Cortex-A53#2(Reset)
   13 Cortex-A53#3(Reset)
xsct% dow "bl31.elf"
Downloading Program -- bl31.elf
section, .text: 0xfffea000 - 0xffff1fff
section, .rodata: 0xffff2000 - 0xffff2fff
section, .data: 0xffff3000 - 0xffff679d
section, stacks: 0xffff67c0 - 0xffff78bf
section, .bss: 0xffff78c0 - 0xffff863f
section, xlat_table: 0xffff9000 - 0xffffdfff
section, coherent_ram: 0xffffe000 - 0xffffefff
100%  0MB  0.3MB/s 00:00
Setting PC to Program Start Address 0xfffea000
Successfully downloaded bl31.elf

我們沒有重新啟動處理器,因為還缺少一樣?xùn)|西,那就是 Linux 內(nèi)核本身。

11、完整的 Linux 鏡像

本教程的最后一步是將 Linux 內(nèi)核鏡像下載到 DDR 內(nèi)存中,并通過 U-Boot 啟動它。用于下載鏡像的地址有限制。必須將鏡像放置在 DDR 內(nèi)存的空段中,并且不能損壞內(nèi)存中已有的任何其他鏡像。如果你已經(jīng)創(chuàng)建了一個 PetaLinux 項目,可以在配置文件中通過帶有 CONFIG_SUBSYSTEM_UBOOT_FIT_IMAGE_OFFSET 標(biāo)記的配置項找到對應(yīng)的地址

請注意,Linux 內(nèi)核需要設(shè)備樹二進制文件和可掛載的根文件系統(tǒng)才能完成啟動過程。為了快速演示,我準(zhǔn)備了一個 INITRAMFS 鏡像,并使用 PetaLinux 工具將內(nèi)核、根文件系統(tǒng)和設(shè)備樹二進制文件打包到一個鏡像文件中。也可以根據(jù)需要選擇其他方法。

xsct% targets -set-nocase -filter {name =~"*A53#0*"}
xsct% dow -data "image.ub"0x10000000
100%  24MB  0.3MB/s 01:37
Successfully downloaded image.ub

下載 Linux 內(nèi)核需要一些時間,因為它是整個過程中最大的鏡像文件。接下來,我們釋放 APU,然后通過檢查串口通道來觀察設(shè)備上的情況。

首先,運行 ARM 可信固件。其輸出如下所示。

NOTICE: ATF running on XCZU9EG/silicon v4/RTL5.1 at 0xfffea000
NOTICE: BL31: v2.4(release):v1.1-7609-g851523ea2
NOTICE: BL31: Built : 0807, Apr 28 2021

當(dāng) ATF 完成將安全監(jiān)視器調(diào)用導(dǎo)出到操作系統(tǒng)后,就會發(fā)生 U-Boot 交接。

U-Boot 2021.01 (Jun 01 2021 - 1106 +0000)
Board: Xilinx ZynqMP
DRAM: 4 GiB
PMUFW: v1.1
EL Level:    EL2
Chip ID:    zu9eg
NAND: 0 MiB
MMC:  mmc@ff160000: 0, mmc@ff170000: 1
In:  serial
Out:  serial
Err:  serial
Bootmode: QSPI_MODE
Reset reason:  DEBUG
Net:
ZYNQ GEM: ff0b0000, mdio bus ff0b0000, phyaddr -1, interface rgmii-id
eth0: ethernet@ff0b0000
Hit any key to stop autoboot: 0
ZynqMP>

當(dāng)終端出現(xiàn) U-Boot 提示符后,可以輸入bootm 0x10000000來啟動下載的 Linux 內(nèi)核鏡像。由于該鏡像完整(包含內(nèi)核、根文件系統(tǒng)和設(shè)備樹),它將自動啟動。

## Loading kernel from FIT Image at 10000000 ...
 Using'conf-system-top.dtb'configuration
 Trying'kernel-1'kernel subimage
  Description: Linux kernel
  Created:   2021-06-04 1516 UTC
  Type:     Kernel Image
  Compression: gzip compressed
  Data Start:  0x100000f8
  Data Size:  9356113 Bytes = 8.9 MiB
  Architecture: AArch64
  OS:      Linux
  Load Address: 0x00200000
  Entry Point: 0x00200000
  Hash algo:  sha256
  Hash value:  b4f7073afddc350f3c14f3e9ac1bf6ef8604c602951d13bbe58548bd0d415241
 Verifying Hash Integrity ... sha256+ OK
## Loading ramdisk from FIT Image at 10000000 ...
 Using'conf-system-top.dtb'configuration
 Trying'ramdisk-1'ramdisk subimage
  Description: petalinux-image-minimal
  Created:   2021-06-04 1516 UTC
  Type:     RAMDisk Image
  Compression: uncompressed
  Data Start:  0x108fa12c
  Data Size:  16778258 Bytes = 16 MiB
  Architecture: AArch64
  OS:      Linux
  Load Address: unavailable
  Entry Point: unavailable
  Hash algo:  sha256
  Hash value:  6fcf87930415873cac0aa2232786dace5b65379e68e42b0a6c30f77b870807bc
 Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 10000000 ...
 Using'conf-system-top.dtb'configuration
 Trying'fdt-system-top.dtb'fdt subimage
  Description: Flattened Device Tree blob
  Created:   2021-06-04 1516 UTC
  Type:     Flat Device Tree
  Compression: uncompressed
  Data Start:  0x108ec55c
  Data Size:  56061 Bytes = 54.7 KiB
  Architecture: AArch64
  Hash algo:  sha256
  Hash value:  9bf95db6c5106f1f1945af67bbb43f2269539e514acadf88c4615f4ae7d6b595
 Verifying Hash Integrity ... sha256+ OK
 Booting using the fdt blob at 0x108ec55c
 Uncompressing Kernel Image
 Loading Ramdisk to 7cd11000, end 7dd11412 ... OK
 Loading Device Tree to 000000007cd00000, end 000000007cd10afc ... OK
Starting kernel ...
[  0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[  0.000000] Linux version 5.10.0-xilinx-v2021.1 (oe-user@oe-host) (aarch64-xilinx-linux-gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35.1)#1SMP Fri Jun 4 15:57
:16 UTC 2021
[  0.000000] Machine model: xlnx,zynqmp
...............

...............
PetaLinux 2021.1 ZynqUS_Linux ttyPS0
root@ZynqUS_Linux:~ > uname -r
5.10.0-xilinx-v2021.1

現(xiàn)在,硬件上已經(jīng)安裝了完整的 Linux 鏡像 :)

提示與經(jīng)驗總結(jié)

流程順序不可隨意更改 — 每一步都有依賴

JTAG 啟動非常強大 — 即使沒有 SD/USB/網(wǎng)絡(luò)也能引導(dǎo)系統(tǒng)

要注意 JTAG 鏈路穩(wěn)定性 — 線纜長度、頻率設(shè)置會影響連接穩(wěn)定性

ATF 必須支持 UltraScale+ 安全模式 — 否則內(nèi)核可能不能正常訪問安全級別寄存器

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20434

    瀏覽量

    333883
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11755

    瀏覽量

    218995
  • JTAG
    +關(guān)注

    關(guān)注

    6

    文章

    415

    瀏覽量

    74951
  • UltraScale
    +關(guān)注

    關(guān)注

    0

    文章

    126

    瀏覽量

    32361

原文標(biāo)題:從 JTAG 啟動 Zynq UltraScale+ 上的嵌入式 Linux 鏡像:詳細(xì)實戰(zhàn)教程

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    通過JTAG啟動Linux的方法和腳本

    在 AMD SoC 器件(AMD Zynq 7000 SoC,AMD Zynq UltraScale+ MPSoC,AMD Versal Adaptive SoC),常見的
    的頭像 發(fā)表于 12-22 10:27 ?3449次閱讀
    <b class='flag-5'>通過</b><b class='flag-5'>JTAG</b><b class='flag-5'>啟動</b><b class='flag-5'>Linux</b>的方法和腳本

    Zynq UltraScale + MPSoC USB 3.0 CDC器件類設(shè)計

    Zynq?UltraScale+?MPSoC USB 3.0控制器由兩個獨立的雙角設(shè)備(DRD)控制器組成。兩者都可以單獨配置為在任何給定時間用作主機或設(shè)備。USB 3.0 DRD控制器通過
    發(fā)表于 01-03 09:59

    如何利用ZYNQ MPSoC玩DOOM?

    賽靈思和 DornerWorks 的系統(tǒng)軟件團隊在賽靈思的 Zynq? Ultrascale+? MPSoC啟動 Xen Project 管理程序時,我們發(fā)現(xiàn)可
    發(fā)表于 10-09 06:21

    如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器

      如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+
    發(fā)表于 01-07 16:02

    如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器

    如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
    發(fā)表于 01-22 06:29

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    發(fā)表于 02-02 07:53

    基于Zynq UltraScale+ MPSoC上運行 Xen 管理程序

    熟悉運行在賽靈思 Zynq UltraScale+ MPSoC 上的 Xen 管理程序。 賽靈思和 DornerWorks 的系統(tǒng)軟件團隊在賽靈思的 Zynq?
    發(fā)表于 11-16 20:17 ?3927次閱讀
    基于<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>上運行 Xen 管理程序

    Zynq UltraScale+ MPSoC的發(fā)售消息

    Zynq?UltraScale+?MPSoC,現(xiàn)已開始發(fā)售。視頻向您重點介紹了Xilinx UltraScale +產(chǎn)品組合的第一位成員
    的頭像 發(fā)表于 11-27 06:47 ?4390次閱讀

    如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?

    Zynq UltraScale+ MPSoC VCU DDR 控制器是一款專用 DDR 控制器,只支持在 Zynq UltraScale+
    發(fā)表于 02-23 06:00 ?15次下載
    如何調(diào)試 <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b> VCU DDR 控制器?

    米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源清單分享

    米爾電子推出的國內(nèi)首款zynq ultrascale+ mpsoc平臺核心板(及開發(fā)板):MYC-CZU3EG吸引了人工智能、工業(yè)控制、嵌入式
    發(fā)表于 01-07 15:20 ?4次下載
    米爾電子<b class='flag-5'>zynq</b> <b class='flag-5'>ultrascale+</b> <b class='flag-5'>mpsoc</b>底板外設(shè)資源清單分享

    Zynq UltraScale+ MPSoC中的隔離方法

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC中的隔離方法.pdf》資料免費下載
    發(fā)表于 09-13 17:11 ?1次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>中的隔離方法

    Zynq UltraScale+ MPSoC的隔離設(shè)計示例

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC的隔離設(shè)計示例.pdf》資料免費下載
    發(fā)表于 09-13 11:28 ?3次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的隔離設(shè)計示例

    Zynq UltraScale+MPSoC嵌入式設(shè)計教程

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+MPSoC嵌入式設(shè)計教程.pdf》資料免費下載
    發(fā)表于 09-13 09:14 ?6次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+MPSoC</b><b class='flag-5'>嵌入式</b>設(shè)計教程

    Zynq UltraScale+ MPSoC驗證數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC驗證數(shù)據(jù)手冊.pdf》資料免費下載
    發(fā)表于 09-15 10:13 ?0次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>驗證數(shù)據(jù)手冊

    Zynq UltraScale+ MPSoC數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC數(shù)據(jù)手冊.pdf》資料免費下載
    發(fā)表于 12-30 14:37 ?3次下載