调试Linux内核预解压缩阶段

时间:2012-03-05 23:40:40

标签: linux-kernel gdb embedded arm

我试图在解压缩之前使用GDB来调试Linux内核zImage。内核在ARM目标上运行,我有一个JTAG调试器与GDB服务器存根连接。目标必须加载引导加载程序。引导加载程序从闪存中读取内核映像并将其放在0x20008000的RAM中,然后分支到该位置。

我已启动GDB并连接到远程目标,然后我使用GDB的add-symbol-file命令:

add-symbol-file arch/arm/boot/compressed/vmlinux 0x20008000 -readnow

当我为该地址设置断点时,它会陷入正确的位置 - 当它分支到内核时。但是, GDB显示来自arch/arm/boot/compressed/head.S来源的错误行。它落后了4条线。我该如何解决这个问题?

我也尝试将-s section addr选项添加到add-symbol-file -s .start 0x20008000;这导致完全相同的问题。

1 个答案:

答案 0 :(得分:2)

在使用低级调试进行编译时,有汇编程序宏可以打印出来。您必须确保宏适合您的电路板。

linux-latest/arch/arm$ find . -name debug-macro.S | wc
 56      56    2306

找到您的电路板的文件,并确保命中正确的串口寄存器。您可以使用JTAG检测代码。这些宏用在解压缩代码中。当然配置为* CONFIG_DEBUG_LL *。

最有可能的是ATAG不正确或其他要求之一。检查文档/ arm / Booting 以确保正确设置了寄存器。请注意,最近的内核需要发送 dt 列表。