我必须在 ARM 架构上测试一些低级代码。通常,在真实的板上进行实验是相当复杂的,所以我正在考虑 QEMU。

我想要得到的是某种调试信息,例如 printfs 或 gdb。我知道这对于 Linux 来说很简单,因为它实现了 QEMU Integrator 的设备驱动程序和 gdb 功能,但我不使用 Linux。我还怀疑从 Linux 内核源代码中提取这种功能会很复杂。

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

有帮助吗?

解决方案

您不需要一个目标OS到这里面QEMU运行调试代码 - QEMU已经这样做,对你

具体而言,QEMU支持从远程GDB调试 - 你可以使用适当的命令行选项运行QEMU并且它将导出GDB(在主机上运行的)的副本可以连接到的接口。在这一点上,你可以非常简单,只是因为如果你是在主机上运行它调试GDB的程序。

http://wiki.osdev.org/GDB 看起来具有更多的基本信息;可能不足以完全让你开始,但至少给你的基本概念和一些术语来寻找QEMU和GDB文档。跳过关于“实施GDB存根”,位这是自QEMU有一个已经在这里并不适用,在“使用模拟器存根”一节开始。简短的形式很简单,就是你开始QEMU与-s选项(出口在本地主机上一个GDB连接:1234)和-S选项(等待一个GDB开始执行前“继续”命令),然后在GDB你的主机,你说的对target remote :1234代替run。此外,当然,你需要使用GDB的ARM版本,而不是天然86之一。

(另外,如果你愿意支付的商业解决方案,CodeSourcery的ARM工具链有IDE集成自动设置这一切了,包括“printf的”打印到调试器控制台支持。在这作品物理板也一样,如果你有一个硬件调试器对我是一个CodeSourcery的员工平时免责声明适用 - 。但我确实很容易发现它使用)

更新,2012:的CodeSourcery的工具链现在被称为Mentor Graphics公司的Sourcery Codebench完成,但上述所有仍然适用

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top