我正在努力将U-Boot移植到我们正在开发的定制电路板上,基于德州仪器AM5728,并且我在调试U-Boot时遇到了一些问题。我可以通过JTAG加载和调试U-Boot SPL,但是一旦在SPL完成后通过JTAG加载U-Boot本身,我就无法步进/到达硬件断点。这很大程度上是由于不知道U-Boot二进制文件中调试符号表的位置。我已经在U-Boot中启用了DEBUG宏并且没有成功,所以我想到如果我能得到调试符号,我实际上可以解决我遇到的任何错误。
有没有办法从构建过程/ Makefile中获取调试符号?
答案 0 :(得分:2)
这里要记住一些事情。首先, spl / u-boot-spl 和 u-boot 是U-Boot的ELF文件,在AM5728的情况下,您将加载 MLO 和 u-boot.img 进入内存以启动它们。要记住的第二件事是,U-Boot很早就将内存从加载位置重新定位到内存中,并计算并恢复运行。获取此值的最简单方法是,假设系统引导至提示符:
=> bdinfo
...
relocaddr = 0xFFF6D000
reloc off = 0x7F76D000
这些值与系统有关,但会告诉您系统内存中的绝对地址和要添加到链接的地址的偏移量,以了解给定函数现在所在的位置。 u-boot.map 文件将列出链接所有功能的其他内容。如何告诉调试器事情的位置取决于相关的调试器。例如,使用gdb,您将重新加载符号文件并为其提供新的relocaddr值。