gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:22:46 25 4
gpt4 key购买 nike

我正在尝试使用 GDB 在解压缩之前调试 Linux 内核 zImage。内核在 ARM 目标上运行,我有一个 JTAG 调试器与 GDB 服务器 stub 连接到它。目标必须加载引导加载程序。引导加载程序从闪存读取内核镜像并将其放入 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-s .start 0x20008000 ;这会导致完全相同的问题。

最佳答案

在使用低级调试进行编译时,有一些汇编宏会打印出内容。您必须确保宏适用于您的电路板。

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

找到适合您电路板的文件并确保命中正确的串行端口寄存器。您无需使用 JTAG 即可检测代码。这些宏用于解压代码。当然用 *CONFIG_DEBUG_LL* 配置。

很可能 ATAG 不正确或其他要求之一。 checkout Documentation/arm/Booting 以确保您正确设置了寄存器。请注意,最近的内核有一个新要求,即发送 DT 列表。

关于linux-kernel - 调试Linux内核预解压阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com