GDB 通过 QEMU 调试 Raspberry Pi

GDB Debugging a Raspberry Pi via QEMU

关于使用 gdb-multiarch 从 linux x64 主机调试 Raspberry pi 3,以及编写一般的裸机程序,我有多个问题。我们目前面临一个问题,我们的代码似乎没有加载到内存中。当我们在 GDB 中开始调试时,我们从地址 0 开始。向下 3 条指令我们跳转到 0x10000。如果我修改我的链接描述文件以将 Raspberry pi 放入任一地址,我会得到相同的结果,我们跳转到 0x10000 并且我们的代码不会加载到那里。相反,我们得到这个

我们还注意到,当我们应该调试 64 位代码时,GDB 在这里使用 32 位寄存器名称。

再次回顾一下我们正在使用的内容: QEMU 与多功能 pb 机器。 aarch64 GCC 交叉编译器。 GDB-multiarch.

我们已经在两个不同的主机上进行了尝试:Ubuntu 16.04 x64 主机 运行 在 vi​​rtualbox 中。原生生成 x64 运行。 我们还尝试了 arm-none-eabi 工具链,但是 运行 遇到了问题,没有将我们的代码编译为 64 位。

非常感谢您的帮助!谢谢!

您不提供命令行,但 "versatile-pb" 是一种仅限 32 位的板类型,因此尝试 运行 64 位代码会以令人困惑的方式出现错误.您需要告诉 QEMU 模拟一个支持 64 位的板,该板与您的 bare-metal 代码期望 运行 相匹配。

在 QEMU 2.12 中会有一个 "raspi3" QEMU 开发板,它可能对您有所帮助;如果您想试验一下,您现在需要尝试构建最新的 2.12 候选发布 tarball(2.12 发布要再过几周)。否则,如果您确保您的裸机代码构建为能够 运行 在该板上,您可以使用 "virt" 板。