嵌入式CPU模拟器通常可以编程为也模拟硬件。Xen以外的所有虚拟化技术都可以做到这一点。但是,您需要编写代码,假装在某个物理地址或在x86上的I / O总线地址上有一些寄存器,然后您需要对这些地址的读取和写入做出响应,就好像您的软件是物理地址一样。正在访问其控制和状态寄存器的芯片。
如果您想这样做,我建议您修改QEMU。但这并不容易。通常,只有在设计带有微控制器和I / O的其他内核的定制芯片时,才可以执行这种操作。
ARM Holdings出售的开发系统可提供此功能,并且比在QEMU上进行黑客攻击更容易使用,但价格昂贵。
有几种运行单个子例程的开源ARM仿真器,它们本身可以调用其他子例程,您可以将其用于调试调整不依赖于硬件访问的子例程的性能。我成功地使用其中之一来优化ARM7TDMI的AES加密器。
您可以用C或C ++编写一个简单的单元测试工具,将要测试的类或子例程链接到它,然后在模拟器中运行。
多年来,我一直在思考类似的问题,即如何对Linux或Mac OS X内核代码进行单元测试。应该有可能,但我从未真正尝试过。一种可能是构建一个完整的内核,而不是孤立地测试您的代码,而将单元测试框架直接链接到您的内核中。然后,您可以从某种外部接口启动单元测试。
使用代码覆盖率工具,然后通过其外部接口将固件作为一个完整的软件包进行测试,可能会更有效率。Coverage工具会查找尚未测试的代码路径,因此您可以添加其他外部测试,以尝试获得更大的覆盖范围。