国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

如何在Zynq UltraScale+ MPSoC平臺(tái)上通過(guò)JTAG啟動(dòng)嵌入式Linux鏡像

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

掃碼添加小助手

加入工程師交流群

以下文章來(lái)源于OpenFPGA,作者碎碎思

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

所需條件與工具

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

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

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

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

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

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

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

啟動(dòng) XSCT 命令行

配置 FPGA(下載 bitstream)

下載并運(yùn)行 PMU Firmware

配置處理系統(tǒng)

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

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

下載 ARM Trusted Firmware

下載并啟動(dòng) Linux 鏡像

1、如何啟動(dòng) XSCT

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

/Xilinx/Vitis/2021.1/bin/xsct

或者開(kāi)始菜單里尋找。

啟動(dòng)后,會(huì)進(jìn)入交互式命令行,等待你輸入各種引導(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:通過(guò)板上顯示的 IP

SmartLynq(USB 直連):通常是 10.0.0.2

Platform Cable(國(guó)內(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 鏈的每個(gè)設(shè)備。設(shè)備可以是單元、CPU 內(nèi)核、FPGA 等。可以對(duì)每個(gè)設(shè)備進(jìn)行管理。有時(shí)可能無(wú)法在目標(biāo)設(shè)備和 JTAG 電纜之間建立可靠的連接。在這種情況下,應(yīng)該檢查錯(cuò)誤消息并根據(jù)消息采取相應(yīng)措施。例如,當(dāng)沒(méi)有 JTAG 連接或電路板斷電時(shí),將顯示如下所示的錯(cuò)誤提示。

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

最常遇到的問(wèn)題與使用的 JTAG 頻率有關(guān)。JTAG 鏈路的硬件結(jié)構(gòu)對(duì)其最佳頻率有顯著影響。某些物理特性,例如電纜長(zhǎng)度、目標(biāo)數(shù)量等,都可能影響合適的 JTAG 頻率。在這種情況下,XSCT 工具會(huì)生成一些錯(cuò)誤消息,指示與目標(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)此類輸出時(shí),應(yīng)該重新調(diào)整 JTAG 頻率,以建立可靠穩(wěn)定的連接。可以通過(guò)調(diào)用jtag frequency -list以下方法查找 JTAG 電纜支持的頻率。然后,可以從列表中選擇合適的頻率。也可以選擇任意頻率,該實(shí)用程序會(huì)自動(dòng)處理舍入誤差。

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)

在開(kāi)始操作之前,CPU必須中斷并重置為初始狀態(tài)。沒(méi)有此步驟,將無(wú)法管理處理系統(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 實(shí)際上是一款 FPGA 芯片,因此需要硬件鏡像才能訪問(wèn)其底層組件,例如 DDR以太網(wǎng)、串行接口等。通過(guò) JTAG 下載完整的 FPGA 鏡像非常簡(jiǎn)單,只需使用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 鏡像會(huì)清除現(xiàn)有的 PL 鏡像并將其替換為新鏡像。還可以通過(guò)向同一命令提供選項(xiàng)來(lái)管理可編程邏輯。按 Enter 鍵help fpga可查看更多信息。目前,將 FPGA 鏡像下載到硬件就足夠了,其余內(nèi)容超出了本教程的范圍。

6、PMU固件

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

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

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)鏈上。通過(guò)獲取處理器的訪問(wèn)權(quán)限,我們現(xiàn)在可以下載并運(yù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

如果一切順利,我們可以重新啟用安全門,以防止訪問(wèn) MicroBlaze PMU,并繼續(xù)進(jìn)行 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è)計(jì)工具導(dǎo)出的硬件映像中包含一個(gè)名為“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

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

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

FSBL 是Zynq UltraScale+ 啟動(dòng)時(shí)在應(yīng)用處理器上運(yùn)行的第一個(gè)程序(實(shí)際上是第二個(gè),BootROM 首先運(yùn)行) 。它負(fù)責(zé)在調(diào)用 SSBL (第二階段引導(dǎo)加載程序)或所需的裸機(jī)應(yīng)用程序之前配置硬件并初始化一些組件。可以使用自動(dòng)生成的 FSBL,也可以編寫自己的 FSBL。要下載并運(yùn)行 FSBL,請(qǐng)調(diào)用以下命令。請(qǐng)注意,F(xiàn)SBL 必須在應(yīng)用處理單元的第一個(gè) Cortex-A53 內(nèi)核上運(yùn)行。因此,我們需要相應(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)

啟動(dòng) FSBL 后,我們讓它運(yùn)行一段時(shí)間完成操作。然后,我們?cè)诮唤狱c(diǎn)手動(dòng)停止它。由于我使用的是定制板,其啟動(dòng)引腳被硬配置為 QSPI 啟動(dòng)模式,所以我修改了 FSBL 代碼,強(qiáng)制其使用 JTAG 啟動(dòng)模式。以下是我的 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ī)啟動(dòng)流程類似,SSBL 遵循 FSBL。由于我們使用的是 PetaLinux 構(gòu)建系統(tǒng)來(lái)生成鏡像,因此我們將使用常用的 U-Boot 作為 SSBL 程序。也可以使用不同的引導(dǎo)加載程序,但流程應(yīng)該類似。

U-Boot 需要一個(gè)設(shè)備樹(shù)二進(jìn)制文件,因此我們需要在啟動(dòng) U-Boot 之前將其加載到內(nèi)存中。該設(shè)備必須下載到內(nèi)存中預(yù)先設(shè)定的地址。在 PetaLinux 項(xiàng)目中,此配置位于名為CONFIG_SUBSYSTEM_UBOOT_DEVICETREE_OFFSET的參數(shù)下。可以在我之前的文章中找到一個(gè)簡(jiǎn)單的單行 Bash 命令,可以更快地找到所需的配置。在我的示例中,該地址為0x100000 。請(qǐng)注意,由于該二進(jìn)制文件不是可執(zhí)行文件,因此我們使用-data選項(xiàng)來(lái)下載它。

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:

注意到了嗎?這一步其實(shí)有點(diǎn)棘手,而且一旦出錯(cuò)就很難找出原因。與 FSBL 不同,我們并沒(méi)有在將 U-Boot 下載到內(nèi)存后立即啟動(dòng)它。這是因?yàn)?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)核啟動(dòng)時(shí)運(yùn)行在 ARM 異常級(jí)別 1/0。在該異常級(jí)別下,Linux 內(nèi)核對(duì)系統(tǒng)或安全關(guān)鍵寄存器的訪問(wèn)受到硬件限制。Linux 與這些受限設(shè)備的所有交互都通過(guò)運(yùn)行在異常級(jí)別 3 的 ARM 可信固件 (ATF) 進(jìn)行路由。如果沒(méi)有 ATF, Linux 鏡像可能根本無(wú)法啟動(dòng)。

10、ARM 可信固件 (ATF)

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

我們沒(méi)有重新啟動(dòng)處理器,因?yàn)檫€缺少一樣?xùn)|西,那就是 Linux 內(nèi)核本身。

11、完整的 Linux 鏡像

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

請(qǐng)注意,Linux 內(nèi)核需要設(shè)備樹(shù)二進(jìn)制文件和可掛載的根文件系統(tǒng)才能完成啟動(dòng)過(guò)程。為了快速演示,我準(zhǔn)備了一個(gè) INITRAMFS 鏡像,并使用 PetaLinux 工具將內(nèi)核、根文件系統(tǒng)和設(shè)備樹(shù)二進(jìn)制文件打包到一個(gè)鏡像文件中。也可以根據(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)核需要一些時(shí)間,因?yàn)樗钦麄€(gè)過(guò)程中最大的鏡像文件。接下來(lái),我們釋放 APU,然后通過(guò)檢查串口通道來(lái)觀察設(shè)備上的情況。

首先,運(yùn)行 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)后,就會(huì)發(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來(lái)啟動(dòng)下載的 Linux 內(nèi)核鏡像。由于該鏡像完整(包含內(nèi)核、根文件系統(tǒng)和設(shè)備樹(shù)),它將自動(dòng)啟動(dòng)。

## 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)驗(yàn)總結(jié)

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

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

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

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

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

    關(guān)注

    5198

    文章

    20442

    瀏覽量

    333961
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11758

    瀏覽量

    219001
  • JTAG
    +關(guān)注

    關(guān)注

    6

    文章

    415

    瀏覽量

    74960
  • UltraScale
    +關(guān)注

    關(guān)注

    0

    文章

    126

    瀏覽量

    32361

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    通過(guò)JTAG啟動(dòng)Linux的方法和腳本

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

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

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

    如何利用ZYNQ MPSoC玩DOOM?

    賽靈思和 DornerWorks 的系統(tǒng)軟件團(tuán)隊(duì)在賽靈思的 Zynq? Ultrascale+? MPSoC啟動(dòng) Xen Project 管理程序時(shí),我們發(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上運(yùn)行 Xen 管理程序

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

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

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

    如何調(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è)資源清單分享

    米爾電子推出的國(guó)內(nèi)首款zynq ultrascale+ mpsoc平臺(tái)核心板(及開(kāi)發(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èi)下載
    發(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è)計(jì)示例

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC的隔離設(shè)計(jì)示例.pdf》資料免費(fèi)下載
    發(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è)計(jì)示例

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

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+MPSoC嵌入式設(shè)計(jì)教程.pdf》資料免費(fèi)下載
    發(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è)計(jì)教程

    Zynq UltraScale+ MPSoC驗(yàn)證數(shù)據(jù)手冊(cè)

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

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

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