gpt4 book ai didi

unit-testing - 在没有用户干预的情况下执行裸机程序后如何干净地退出 QEMU?

转载 作者:行者123 更新时间:2023-12-04 03:57:27 24 4
gpt4 key购买 nike

我正在为 ARM 系统组装一个交叉编译单元测试平台,并在带有 qemu-system-arm 的主机上运行测试。 .具体来说,我使用 qemu 来模拟 Stellaris LM3S6965 评估板,因为它包含一个 Cortex M3 处理器,就像我的目标环境一样。在 qemu 中运行的二进制文件是使用 GNU Tools for ARM 构建的。

不涉及操作系统。测试套件作为裸机应用程序在 -nographic 中使用 qemu 运行。模式。工具链和测试台本身工作正常。并且测试成功运行到完成并在 qemu 中产生测试结果也很好。

问题在于将 qemu 包装在自动构建工具中(在本例中为 Rake)。除了键盘命令之外,我还没有找到一种在测试套件运行并吐出结果后让 qemu 退出的好方法。这会导致构建环境挂起/依赖用户干预。

我看了很多,也没有找到关于如何在程序终止后完成简单退出的好资料。我确实找到了一些使用 -no-reboot 运行 qemu 的建议。选项,然后从模拟器中运行的程序触发系统重置。我试过这个。它有效……有点。我在 main() 之后将适当的值写入仿真处理器的复位向量执行,这确实会触发重置。运行测试套件后,qemu 报告捕获系统重置。但是,它将此报告为硬件错误,转储寄存器内容,然后生气地退出(下面的错误消息)。虽然这确实在测试套件运行后完成了退出,但由于 qemu 退出并出现错误情况,它会破坏自动构建脚本。

qemu: hardware error: System reset

我想避免将键盘命令插入构建以模拟用户干预。我还想避免依赖 qemu 以错误状态退出。

看来我离一个干净的导出很近,但并不完全在那里。搜索 qemu 错误消息(上图)除了与切线相关的错误报告外,没有产生任何相关文档。

main() 之后是否有导致qemu 退出的机制?在我缺少的裸机程序中返回?请问这个 -no-reboot + 系统重置策略有效吗?如果是这样,还需要什么才能让 qemu 干净地退出?

最佳答案

aarch64 半主机退出

https://stackoverflow.com/a/40957928/895245给了A32,这里是A64:

.global main
main:
/* 0x20026 == ADP_Stopped_ApplicationExit */
mov x1, #0x26
movk x1, #2, lsl #16
str x1, [sp,#0]

/* Exit status code. Host QEMU process exits with that status. */
mov x0, #0
str x0, [sp,#8]

/* x1 contains the address of parameter block.
* Any memory address could be used. */
mov x1, sp

/* SYS_EXIT */
mov w0, #0x18

/* Do the semihosting call on A64. */
hlt 0xf000

这是 GitHub 上的一个示例:
  • the source
  • how to run it

  • 文档已移至: https://developer.arm.com/docs/100863/latest

    关于unit-testing - 在没有用户干预的情况下执行裸机程序后如何干净地退出 QEMU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31990487/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com