2017-08-14 100 views
0

我正在将U-Boot移植到我们正在开发的基于德州仪器AM5728的自定义主板上,而且我在调试U-Boot时遇到了一些问题。我可以通过JTAG加载和调试U-Boot SPL,但是一旦U-Boot在SPL完成后通过JTAG加载,我就无法步进/到达硬件断点。这主要是由于不知道U-Boot二进制文件中的调试符号表存在于何处。我已经在U-Boot中启用了DEBUG宏,并且没有成功,所以我认为如果我可以得到调试符号,我实际上可以采取任何我遇到的错误。如何获得U-Boot调试符号

有没有办法从构建过程/ Makefile获取调试符号?

回答

2

这里有几件事要记住。首先,SPL /的u-boot-SPL的u-boot是U-Boot的和你要AM5728的情况下ELF文件装车MLOU型的boot.img成内存来启动它们。第二件要记住的事情是,U-Boot相当早的时候会将它自己从内存中的位置重新定位到内存中,并将其放入一个计算并重新运行的地址中。要获得此值最简单的方法是,假设你的系统启动到一个提示:

=> bdinfo 
... 
relocaddr = 0xFFF6D000 
reloc off = 0x7F76D000 

这些值是系统相关的,但告诉你,无论是在系统内存中的绝对地址和偏移添加到链接的地址知道给定函数现在驻留的位置。 u-boot.map文件将列出所有功能链接在其他地方。如何告诉你的调试器在什么地方取决于有问题的调试器。例如,使用gdb,您可以重新载入符号文件并为其指定新的relocaddr值。

+0

我一直有的问题是我没有启动到控制台,有什么在'u-boot.map'文件中,我可以用它来找到relocaddr或reloc off? –

+0

您可以在重定位之前开始调试,并且将有'gd'可供检查,并且可以查看gd-> relocaddr的设置时间。 –

+0

这可能有点超出原始问题的范围,但我发现我的调试器不允许我在任何引用gd-> relocaddr的行上放置断点,这使得调试非常困难。同时,我没有board_init_f的调试符号。有没有办法启用这些?我也发现定义DEBUG不会导致任何打印的调试消息。 –