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

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

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

在Vitis中調(diào)試ARM可信固件和U-boot

王利祥 ? 來(lái)源:mede1001 ? 作者:mede1001 ? 2022-08-02 10:14 ? 次閱讀

本文來(lái)自 XILINX 產(chǎn)品應(yīng)用工程師Stephen MacMahon

在本篇博文中,我們將探討如何在 Vitis 中調(diào)試 Zynq UltraScale 器件啟動(dòng)鏡像。這些啟動(dòng)鏡像包括 ARM 可信固件 (ATF) 和 U-boot。

本篇博文乃是系列博文中的一篇,此系列博文旨在探討如何在 Petalinux 鏡像中調(diào)試各種組件。 (更多系列博文請(qǐng)持續(xù)關(guān)注公眾號(hào)文章推送)

啟動(dòng)鏡像調(diào)試是任何定制板啟動(dòng)過(guò)程中不可或缺的一環(huán),希望本篇博文能夠幫助用戶完整完成定制板啟動(dòng)鏡像的調(diào)試工作。即使您使用的是開(kāi)發(fā)板,本篇博文也將能夠提供有關(guān)啟動(dòng)鏡像在 Zynq UltraScale 器件上的工作方式方面的諸多實(shí)用見(jiàn)解。

啟動(dòng)鏡像的生成途徑多種多樣。用戶可以使用 PetaLinux/Yocto,或者也可以從 GiT 源代碼手動(dòng)構(gòu)建鏡像。本文將演示如何使用 PetaLinux 2020.1 來(lái)為 Zynq UltraScale 器件創(chuàng)建啟用調(diào)試功能的啟動(dòng)鏡像。

PetaLinux 流程:

在此次演示中使用的是 ZCU104 板,但其中步驟應(yīng)適用于所有 Zynq UltraScale 器件。

在 images/Linux 文件夾中提供的 u-boot.elf 不具有在 Vitis 中進(jìn)行調(diào)試所需的符號(hào)信息。因此,我們將使用 PetaLinux 內(nèi)的工作目錄下的 u-boot 二進(jìn)制文件。

并且 PetaLinux 移除了其中間文件以節(jié)省磁盤空間,因此我們需要在 PetaLinux 工程中禁用此功能。

下列步驟演示了用戶如何獲取啟用調(diào)試功能的 ATF 和 U-boot:

petalinux-create -t project --template zynqMP -n linux_image
cd linux_image

pYYBAGGYHxaAA-TBAAKCbyEfraQ148.png

注: 很遺憾,在 PetaLinux 存在 1 個(gè)已知問(wèn)題,即無(wú)法將 debug=1 傳遞到此處的 makefile。用戶可以使用此處所述的變通方法來(lái)手動(dòng)添加該值。

用戶還應(yīng)注意 TMP 目錄:

poYBAGGYHxeAZLJsAAJzENvam10657.png

退出“配置 (Config)”屏幕并單擊“Save”以保存。

如上所述,PetaLinux 提供的 u-boot 可執(zhí)行文件不具有調(diào)試所需的符號(hào)信息。用戶可以通過(guò)修改 build/conf 文件夾下的 local.conf 文件來(lái)阻止 PetaLinux 移除中間構(gòu)建文件。

創(chuàng)建任何構(gòu)建時(shí)都會(huì)創(chuàng)建 build 文件夾,因此我們可以執(zhí)行 petalinux-build,隨后使用 Ctrl + c 在創(chuàng)建此文件時(shí)停止操作。打開(kāi) local.conf 文件并注釋掉以下行:

pYYBAGGYHxmAfn3-AADjJk2T3ks333.png

現(xiàn)在,只需構(gòu)建啟動(dòng)鏡像并使用 PetaLinux 創(chuàng)建可啟動(dòng)鏡像 (BOOT.BIN) 即可

petalinux-build -c bootloader

完成構(gòu)建后,將 u-boot 重命名為 u-boot.elf 并從 tmp 文件夾復(fù)制到 images/linux 文件夾中:

pYYBAGGYHxqASq9iAACFXzuhQKs236.png

下一步,使用 PetaLinux 創(chuàng)建可啟動(dòng)鏡像 (BOOT.BIN)

cd images/linux
petalinux-package --boot --u-boot

作為完整性檢查,我們還可測(cè)試可執(zhí)行文件以確認(rèn)其中包含符號(hào)信息:

poYBAGGYHxuAZDPkAAFDo250lyY464.png

在 Vitis 中執(zhí)行調(diào)試:

我發(fā)現(xiàn)調(diào)試啟動(dòng)鏡像最簡(jiǎn)單的方法是將啟動(dòng)鏡像加載到 SD/QSPI 上,并在運(yùn)行目標(biāo)上執(zhí)行調(diào)試。

啟動(dòng) Vitis 并關(guān)閉歡迎屏幕。

創(chuàng)建新的“調(diào)試配置 (Debug Configuration)”:

pYYBAGGYHxyAVIPbAABLQDW_LDM825.png

雙擊“單應(yīng)用調(diào)試 (Single Application Debug)”:

poYBAGGYHx2AZ5WCAAE2CXuRkt4253.png

將“調(diào)試類型 (Debug Type)”設(shè)置為“連接到運(yùn)行目標(biāo) (Attach to Running Target)”:

pYYBAGGYHx-ADztLAAD8zNABPTU038.png

注: 由于我當(dāng)前使用遠(yuǎn)程連接,因此還需一并設(shè)置遠(yuǎn)程連接。

選擇“應(yīng)用并調(diào)試 (Apply and Debug)”。這樣即可打開(kāi)調(diào)試透視圖。

您可以看到其中 Cortex A53 正在運(yùn)行(我們的啟動(dòng)鏡像)。

poYBAGGYHyCAKklUAACWm0GdyAg456.png

重定位前的調(diào)試:

展開(kāi)賽靈思軟件命令行工具 (XSCT) 窗口。

我們要在其中將符號(hào)文件傳遞給 Cortex A53 #0 以供 ATF 和 U-Boot 使用。

在 XSCT 中使用 memmap 命令設(shè)置符號(hào)文件:

pYYBAGGYHyGAU8bAAABQQQELE7c838.png

然后即可在 ATF 和 U-Boot 中添加中斷點(diǎn)。

我將 ATF 中的中斷點(diǎn)設(shè)置在 bl31_main,將 U-boot 中的中斷點(diǎn)設(shè)置在 board_init_f:

poYBAGGYHyKAVXMCAACH7Bj6gvU492.png

如果將板掉電并重新上電,則會(huì)在 ATF 中看到中斷點(diǎn)被命中。

pYYBAGGYHySASBDqAAFFcJ0EBiU510.png

隨后,用戶可以執(zhí)行恢復(fù) (resume)、單步進(jìn)入 (step into)、單步跳過(guò) (step over) 等:

poYBAGGYHyWATtpKAACEqIf_NtQ875.png

用戶可以單步執(zhí)行此處代碼。例如,用戶可以使用其中的 setup_reloc 功能來(lái)查找 uboot 重定位地址(或者使用 bdinfo)。

重定位地址因用戶而異,我這里的重定位地址為 0x77DE5000。

重定位后的調(diào)試:

uboot 代碼將對(duì)自身進(jìn)行重定位,由于我們已映射符號(hào)文件存儲(chǔ)器,因此,該重定位地址是錯(cuò)誤的。

由此導(dǎo)致我們需要傳遞重定位地址以便調(diào)試器能夠?qū)Υ诉M(jìn)行補(bǔ)償:

poYBAGGYHyaAObBkAABBmke9wlg853.png

讓我們使用 board_init_r 功能。

這是重定位后處理功能:

pYYBAGGYHyeAWQmeAAERYZkFfEI610.png

重定位后,board_init_r 地址將變?yōu)?0x77DE5000 + 0x801A880 = 0x7FDFF880。

如果我在 board_init_r 處添加中斷點(diǎn),即可看到實(shí)際地址符合預(yù)期:

pYYBAGGYHymAGpskAAAbvEqp2aI137.png

如果此時(shí)掉電并重新上電,則將命中 ATF 中的中斷點(diǎn),并且此時(shí)還會(huì)命中重定位后的 U-boot。

pYYBAGGYHyqAGfzPAAEfl9gJ5us334.png
審核編輯:湯梓紅
聲明:本文內(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)投訴
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2155

    瀏覽量

    120850
  • Zynq
    +關(guān)注

    關(guān)注

    9

    文章

    607

    瀏覽量

    47101
  • Vitis
    +關(guān)注

    關(guān)注

    0

    文章

    145

    瀏覽量

    7381
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于AM335x的U-Boot/SPL 的CCS 調(diào)試

    基于Linux的AM335x軟件開(kāi)發(fā)流程,第一步就是U-Boot/SPL(SecondProgram Loader)的移植。##2.調(diào)試環(huán)境的準(zhǔn)備##3.3 SPL的
    發(fā)表于 08-21 15:09 ?9232次閱讀
    基于AM335x的<b class='flag-5'>U-Boot</b>/SPL 的CCS <b class='flag-5'>調(diào)試</b>

    imx6ull開(kāi)發(fā)板u-boot下網(wǎng)絡(luò)部分的移植和調(diào)試

    今天給大家講一講如何將u-boot網(wǎng)絡(luò)部分的移植和調(diào)試。
    發(fā)表于 07-12 15:11 ?2604次閱讀
    imx6ull開(kāi)發(fā)板<b class='flag-5'>u-boot</b>下網(wǎng)絡(luò)部分的移植和<b class='flag-5'>調(diào)試</b>

    U-boot的基本介紹

    從本文開(kāi)始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開(kāi)發(fā)平臺(tái)為AR
    發(fā)表于 07-14 16:52 ?2722次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    發(fā)表于 01-25 15:45 ?13次下載

    一種U-BOOT嵌入千兆網(wǎng)絡(luò)功能的方法

    一種U-BOOT嵌入千兆網(wǎng)絡(luò)功能的方法摘 要:U-BOOT是一種開(kāi)放源碼的、用于多種嵌入式微處理器的引導(dǎo)加載程序,目前U-BOOT僅支持
    發(fā)表于 02-05 17:38 ?17次下載

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一個(gè)LINUX下的工程,在編譯之前必須已經(jīng)安裝對(duì)應(yīng)體系結(jié)構(gòu)的交叉編譯環(huán)境,這里只針對(duì)ARM,編譯器系列軟件為arm-linux-*。
    發(fā)表于 05-17 09:16 ?2053次閱讀

    基于ARM9的U-Boot自動(dòng)識(shí)別啟動(dòng)實(shí)現(xiàn)

    嵌入式ARM9系列處理器支持U-Boot從Nor FLASH或者Nand FLASH啟動(dòng),也支持U-Boot直接下載到內(nèi)存調(diào)試運(yùn)行,根據(jù)
    發(fā)表于 03-04 16:23 ?91次下載
    基于<b class='flag-5'>ARM</b>9的<b class='flag-5'>U-Boot</b>自動(dòng)識(shí)別啟動(dòng)實(shí)現(xiàn)

    u-boot簡(jiǎn)介

    演化而來(lái)。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實(shí)上,不少U-Boot源碼就是根據(jù)相應(yīng)的Linux內(nèi)核源程序進(jìn)行簡(jiǎn)化而形成的,尤其是一些設(shè)備的驅(qū)動(dòng)程序,這從U-Boot源碼的注釋能體現(xiàn)這一點(diǎn)
    發(fā)表于 10-14 11:17 ?3532次閱讀

    如何使用Xilinx SDK調(diào)試u-boot代碼

    了解如何使用Xilinx SDK調(diào)試u-boot代碼。 概述了技術(shù)以獲得重定位偏移量,以便可以SDK應(yīng)用它。
    的頭像 發(fā)表于 11-27 06:36 ?4169次閱讀

    如何在 Vitis 調(diào)試 Zynq UltraScale 器件啟動(dòng)鏡像

    本篇博文中,我們將探討如何在 Vitis 調(diào)試 Zynq UltraScale 器件啟動(dòng)鏡像。這些啟動(dòng)鏡像包括 ARM
    的頭像 發(fā)表于 06-01 15:35 ?3307次閱讀
    如何在 <b class='flag-5'>Vitis</b> <b class='flag-5'>中</b><b class='flag-5'>調(diào)試</b> Zynq UltraScale 器件啟動(dòng)鏡像

    深度解析U-Boot網(wǎng)絡(luò)實(shí)現(xiàn)

    對(duì)于U-Boot而言,并沒(méi)有完整的實(shí)現(xiàn)上述模型,u-boot需要控制固件的尺寸,所以根據(jù)需要做了一些簡(jiǎn)化,其拓?fù)淇蚣苋缦聢D所示:
    發(fā)表于 02-07 11:53 ?2次下載
    深度解析<b class='flag-5'>U-Boot</b>網(wǎng)絡(luò)實(shí)現(xiàn)

    u-boot中使用ethernet的方法

    KV260 petalinux BSPu-boot device treedisable了GEM3,也就是說(shuō)ethernetu-boot
    的頭像 發(fā)表于 07-21 10:25 ?3833次閱讀

    Linux U-Boot開(kāi)發(fā)指南

    介紹 U-Boot 的編譯打包、基本配置、常用命令的使用、基本調(diào)試方法等, 為 U-BOOT 的移植及應(yīng)用開(kāi)發(fā)提供了基礎(chǔ)。
    的頭像 發(fā)表于 03-06 10:28 ?1247次閱讀
    Linux <b class='flag-5'>U-Boot</b>開(kāi)發(fā)指南

    U-boot的QSPI驅(qū)動(dòng)移植方法及驗(yàn)證方法

    本文主要講述了U-boot的QSPI驅(qū)動(dòng)移植方法及驗(yàn)證方法。在產(chǎn)品調(diào)試階段,U-boot的driver子系統(tǒng)包含了豐富的外設(shè)驅(qū)動(dòng),方便外設(shè)功能驗(yàn)證與調(diào)試。
    的頭像 發(fā)表于 04-14 10:21 ?2819次閱讀
    <b class='flag-5'>U-boot</b>的QSPI驅(qū)動(dòng)移植方法及驗(yàn)證方法

    u-boot armv8鏈接腳本

    armv8u-boot使用arch/arm/cpu/armv8/u-boot.lds進(jìn)行鏈接。 u-boot-spl和
    的頭像 發(fā)表于 12-07 11:19 ?565次閱讀