【问题标题】:Low level qemu based debugging基于 qemu 的低级调试
【发布时间】:2011-02-06 09:14:50
【问题描述】:

我必须在 ARM 架构上测试一些低级代码。通常在实际电路板上进行实验非常复杂,所以我在考虑 QEMU。

我想获得一些调试信息,例如 printfs 或 gdb。我知道这对 linux 很简单,因为它实现了 QEMU Integrator 的设备驱动程序和 gdb 功能,但我没有使用 Linux。另外我怀疑从 Linux 内核源代码中提取这种功能会很复杂。

我正在从一些已经实现其中一项功能的简单操作系统中进行搜索。你有什么建议吗?

【问题讨论】:

标签: debugging embedded gdb arm qemu


【解决方案1】:

您不需要目标操作系统来调试在 QEMU 中运行的代码——QEMU 已经为您做到了。

具体来说,QEMU 支持从 GDB 进行远程调试——您可以使用适当的命令行选项运行 QEMU,它将导出一个 GDB 副本(在主机上运行)可以连接到的接口。此时,您可以在 GDB 中调试程序,就像在主机上运行它一样。

http://wiki.osdev.org/GDB 似乎有更多的基本信息;可能不足以让你完全入门,但至少给你基本的想法和一些在 QEMU 和 GDB 文档中寻找的术语。跳过关于“实现 GDB 存根”的部分,这里不适用,因为 QEMU 已经有了,从“使用仿真器存根”部分开始。简而言之,您使用 -s 选项(在 localhost:1234 上导出 GDB 连接)和 -S 选项(在开始执行之前等待 GDB“继续”命令)启动 QEMU,然后在 GDB 中打开你的主机你说target remote :1234而不是run。此外,当然,您需要使用 GDB 的 ARM 版本,而不是原生 x86 版本。

(此外,如果您愿意为商业解决方案付费,CodeSourcery 的 ARM 工具链具有 IDE 集成,可以自动设置所有这些,包括支持“printf”打印到调试器控制台。这适用于如果您有硬件调试器,也可以使用物理板。关于我是 CodeSourcery 员工的通常免责声明适用——但我确实发现它非常易于使用。)

2012 年更新: CodeSourcery 的工具链现在称为 Mentor Graphics Sourcery CodeBench,但以上所有内容仍然适用。

【讨论】:

  • 在某些情况下,您应该将 -s 替换为: -gdb tcp::1234,ipv4 ipv4 参数强制 IPV4 连接而不是IPV6 是“无法建立连接,因为目标机器主动拒绝它”的原因。消息。
【解决方案2】:

我意识到我在这里解决的是您最初的问题,而不是您提出的解决方案(也许这样更好?),但要直接在目标上使用 GDB(或 Insight/GDB),请使用低成本 JTAG 工具和@987654321 @。可以在here 找到此类设置的示例以及如何实现它。

如果您有更大的预算,功能更全面的 JTAG 调试器可能会很有用,例如 Abatron BDI3000 with bdiGDB firmware,它允许使用 GDB 通过以太网进行远程调试和设备编程,无需特殊驱动程序或目标调试代理。

【讨论】:

  • 是的,这样的硬件调试器设置绝对是在目标板上进行此类调试的方法。如果您正在执行 Cortex-M3 编程,TI Stellaris(前 Luminary-Micro)板具有巧妙的设置,其中 JTAG 调试器内置于板中,因此您只需要一根 USB 电缆。而我在回答中提到的QEMU解决方案,基本上就是对此的软件仿真。
【解决方案3】:

也许像OKL4 这样的微内核会满足您的需求?

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多