2017-08-14 96 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不會導致任何打印的調試消息。 –