Sha*_*off 5 embedded gdb arm linux-kernel
我试图在解压缩之前使用GDB来调试Linux内核zImage.内核在ARM目标上运行,我有一个JTAG调试器与GDB服务器存根连接.目标必须加载引导加载程序.引导加载程序从闪存中读取内核映像并将其放入RAM中0x20008000
,然后分支到该位置.
我已经启动了GDB并连接到远程目标,然后我使用GDB的add-symbol-file
命令:
add-symbol-file arch/arm/boot/compressed/vmlinux 0x20008000 -readnow
Run Code Online (Sandbox Code Playgroud)
当我为该地址设置断点时,它会陷入正确的位置 - 当它分支到内核时.但是,GDB显示了错误的来源arch/arm/boot/compressed/head.S
.它落后了4条线.我怎样才能解决这个问题?
我也尝试添加-s section addr
选项add-symbol-file
有-s .start 0x20008000
; 这导致完全相同的问题.
有一些汇编器宏可以在使用低级调试进行编译时打印出内容。您必须确保宏适合您的主板。
linux-latest/arch/arm$ find . -name debug-macro.S | wc
56 56 2306
Run Code Online (Sandbox Code Playgroud)
找到适合您的板的文件并确保命中正确的串行端口寄存器。您无需使用 JTAG 即可检测代码。这些宏在解压缩代码中使用。当然使用*CONFIG_DEBUG_LL*进行配置。
ATAG 很可能不正确或不符合其他要求之一。检查Documentation/arm/Booting以确保寄存器设置正确。请注意,最近的内核有一个发送dt列表的新要求。