我正在为ARM系统装配一个交叉编译单元测试平台,并使用qemu-system-arm
在主机上运行测试。具体来说,我使用qemu来模拟Stellaris LM3S6965 Stellaris,因为它包含一个M3处理器,就像我的目标环境一样。qemu中的二进制运行是用用于ARM的GNU工具构建的。
不涉及操作系统。测试套件作为一个裸金属应用程序在-nographic
模式下运行。工具链和试验台本身运行良好。并且测试成功地运行到完成,并在qemu内产生测试结果。
问题是在自动构建工具中封装qemu (本例中是Rake)。除了键盘命令之外,我还没有找到一种很好的方法来使qemu在测试套件运行并输出其结果之后退出。这会导致构建环境挂起/依赖用户干预。
我已经看得很高和低,没有找到好的来源如何完成一个简单的退出后,程序终止。我确实找到了一些建议:使用-no-reboot
选项运行qemu,然后从模拟器中运行的程序触发系统重置。我试过这个。它可以工作…有点像。在main()
执行后,我将适当的值写入模拟处理器的重置向量,这确实触发了重置。在运行测试套件之后,qemu报告捕获了系统重置。但是,它将此报告为硬件错误,转储寄存器内容,然后退出愤怒(下面的错误消息)。虽然这确实是在测试套件运行后完成退出,但由于qemu在错误条件下退出,它会破坏自动构建脚本。
qemu: hardware error: System reset
为了模拟用户的干预,我想避免将键盘命令插入到构建中。我还想避免依赖qemu在错误状态下退出。
看来我离一个干净的出口很近,但不完全是在那里。搜索qemu错误消息(上面)除了与切线相关的错误报告之外,没有生成其他相关文档。
是否有一种机制可以使qemu在main()
返回我所缺少的裸金属程序后退出?这个-no-reboot
+系统重置策略会起作用吗?如果是这样的话,还需要什么才能让qemu干净地退出?
发布于 2015-08-13 14:37:49
通常,您需要对硬件进行任何可能导致系统关闭(断电)的操作;QEMU将使其执行“退出QEMU”。不幸的是,我们所仿真的硬件并不都实现了断电机制(有时它在QEMU模型中没有连接,尽管这通常是一个很容易修复的错误)。
https://stackoverflow.com/questions/31990487
复制相似问题