我试图在Linux内核zImage解压缩之前使用GDB来调试它。内核是在ARM目标上运行的,我有一个JTAG调试器,它与GDB服务器存根连接在一起。目标必须加载引导加载程序。引导加载程序从闪存读取内核映像,并将其放在0x20008000的RAM中,然后分支到该位置。
我已经启动GDB并连接到远程目标,然后使用GDB的add-symbol-file命令如下:
add-symbol-file arch/arm/boot/compressed/vmlinux 0x20008000 -readnow当我为该地址设置一个断点时,它确实会在正确的位置设置陷阱--当它分支到内核时。但是,在arch/arm/boot/compressed/head.S**.的源代码中,GDB显示了错误的行。后面有四条线。我怎么解决这个问题?**
我还尝试将-s section addr选项添加到带有-s .start 0x20008000的add-symbol-file中;这将导致完全相同的问题。
发布于 2013-01-24 18:12:27
有一些汇编程序宏,在编译时打印出来的东西与低级别的调试。你必须确保宏适合你的董事会。
linux-latest/arch/arm$ find . -name debug-macro.S | wc
56 56 2306为您的董事会找到文件,并确保正确的串口寄存器被击中。您可以在不使用JTAG的情况下对代码进行测试。这些宏在解压缩代码中使用。当然,使用*CONFIG_DEBUG_LL*进行配置。
最有可能的是,ATAG是不正确的或其他要求之一。签出文档/arm/引导以确保正确设置寄存器。注意,最近的内核有一个新的要求,即发送dt列表。
https://stackoverflow.com/questions/9575817
复制相似问题