加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 调试Linux内核预解压缩阶段

发布时间:2020-12-14 02:12:31 所属栏目:Linux 来源:网络整理
导读:我试图在解压缩之前使用GDB来调试 Linux内核zImage.内核在ARM目标上运行,我有一个JTAG调试器与GDB服务器存根连接.目标必须加载引导加载程序.引导加载程序从闪存中读取内核映像并将其放入RAM中的0x20008000,然后分支到该位置. 我已经启动了GDB并连接到远程目
我试图在解压缩之前使用GDB来调试 Linux内核zImage.内核在ARM目标上运行,我有一个JTAG调试器与GDB服务器存根连接.目标必须加载引导加载程序.引导加载程序从闪存中读取内核映像并将其放入RAM中的0x20008000,然后分支到该位置.

我已经启动了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 with -s .start 0x20008000;这导致完全相同的问题.

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读