我要在ARM架构上测试一些低级代码。通常实验板上的实验非常复杂,所以我在考虑QEMU。
我想得到的是某种调试信息,如printfs或gdb。我知道这对于linux很简单,因为它实现了QEMU Integrator的设备驱动程序和gdb功能,但我不使用Linux。我还怀疑从Linux内核源代码中提取这种功能会很复杂。
我正在搜索已经实现其中一项功能的简单操作系统。你有什么建议吗?
答案 0 :(得分:17)
您不需要目标操作系统来调试在QEMU中运行的代码 - QEMU已经为您执行了此操作。
具体来说,QEMU支持从GDB进行远程调试 - 您可以使用适当的命令行选项运行QEMU,它将导出GDB副本(在主机上运行)可以连接的接口。此时,您可以在GDB中调试程序,就像在主机上运行它一样。
http://wiki.osdev.org/GDB似乎有更多基本信息;可能还不足以让你完全开始,但至少在QEMU和GDB文档中给你基本的想法和一些术语。略过一下关于“实现GDB存根”的内容,由于QEMU已经有了,所以这里不适用,并从“使用仿真器存根”一节开始。简短形式只是您使用-s
选项(在localhost上导出GDB连接:1234)和-S
选项(在开始执行前等待GDB“continue”命令)启动QEMU,并且然后在您的主机上的GDB中,您说target remote :1234
而不是run
。当然,您还需要使用ARM版本的GDB而不是native-x86版本。
(此外,如果您愿意为商业解决方案付费,CodeSourcery的ARM工具链具有IDE集成功能,可以自动设置所有这些,包括支持“printf”打印到调试器控制台。如果你有一个硬件调试器,也可以使用物理板。关于我作为CodeSourcery员工的通常免责声明适用 - 但我发现它很容易使用。)
更新,2012: CodeSourcery的工具链现在称为Mentor Graphics Sourcery CodeBench,但上述所有工具仍然适用。
答案 1 :(得分:1)
我意识到我在这里解决你原来的问题,而不是你提出的解决方案(也许那更好?),但是直接在目标上使用GDB(或Insight / GDB),使用低成本的JTAG工具和{{ 3}}。可以找到此类设置的示例以及如何实现它OpenOCD。
如果你有更大的预算,一个功能更全面的JTAG调试器可能会很有用,例如here允许使用GDB通过以太网进行远程调试和设备编程,而不需要特殊的驱动程序或目标调试代理。
答案 2 :(得分:-1)
也许像OKL4这样的微内核可以满足您的需求?