NXP MCU 技术论坛
直播中

李泽明

7年用户 1210经验值
私信 关注
[问答]

如何使用TRACE32调试器调试i.MX8MP uboot?

本文档介绍如何使用 TRACE32 调试器调试 i.MX8MP uboot。

1.搭建uboot


按照IMX_LINUX_USERS_GUIDE.pdf搭建uboot,生成flash.bin。
我们将从 eMMC/SD 启动 i.MX8MP,附加 TRACE32 并加载 uboot 符号。
uboot 映像和符号应该来自同一个构建。

2. 运行 uboot 并获取重定位偏移量


将 flash.bin 编程到 eMMC 或 SD 卡,启动 uboot 和“按任意键停止自动启动”。运行命令bdinfo获取 uboot reloc off值。



3.TRACE32脚本


附件imx8mp-uboot-attach.cmm是 TRACE32 脚本。您需要根据您的环境修改Data.LOAD.ElfSYMbol.reloc 。

3.1 数据.LOAD.Elf


此示例中的完整命令是

Data.LOAD.Elf C:DebuggingLinuxSourcesuboot-imxu-boot /NoCODE /STRIPPART“uboot-imx”/SOURCEPATH C:DebuggingLinuxSourcesuboot-imx
第一个参数C:DebuggingLinuxSourcesuboot-imxu-boot告诉调试器在哪里下载 ELF 文件。请注意你不应该使用u-boot.bin

/NoCODE:选项/NOCODE应该只用于加载没有 uboot 代码的符号。

/STRIPPART:使用选项/STRIPPART您可以删除目标文件中存储的部分路径。

/SOURCEPATH:使用选项/SourcePATH,您可以为源文件指定一个基本目录。
例如,如果您在目录/home/user/linux/uboot-imx中的 Linux 机器上编译了 uboot ,并且在 Windows 机器上运行 TRACE32,其中 uboot 源文件树位于C:Debugging LinuxSourcesuboot-imx,将/STRIPPART设置为“uboot-imx”,并将/SOURCEPATH设置为C:DebuggingLinuxSources

通过上述设置,要查找源文件board/freescale/imx8mp_evk/imx8mp_evk.c,调试器将在此处使用路径
C:DebuggingLinuxSourcesuboot-imx + /home/user/linux/uboot-imx /board/freescale/imx8mp_evk/imx8mp_evk.c
因此
C:DebuggingLinuxSourcesuboot-imx/board/freescale/imx8mp_evk/imx8mp_evk.c

3.2 重定位偏移量


我们在步骤 2 中得到了重定位偏移量,替换SYMbol.reloc命令中的值。

4. 将 i.MX8MP 板连接到 TRACE32 调试器


将 TRACE32 连接到 JTAG 端口,打开TRACE32 ICE Arm USB,然后从“ File->Run Script... ”,运行imx8mp-uboot-attach.cmm,您将看到下面的窗口,TRACE32 已连接到 i.MX8MP uboot。



如果你想调试一些函数,比如boot_jump_linux,你可以通过命令break设置断点
。set boot_jump_linux然后在TRACE32 PowerView
中按下Go按钮,在uboot中运行boot命令,uboot会继续运行并在boot_jump_linux停止,如图在下图中。



更多回帖

发帖
×
20
完善资料,
赚取积分