带有U-Boot的QEMU使用100%的CPU

时间:2018-11-09 20:43:24

标签: virtualization qemu u-boot

在Lubuntu VirtualBox VM(macOS主机)内部,我正在运行带有U-Boot内核(?)的QEMU,以加载我编译的ARM汇编代码(使用tftp addr *.bingo addr)。

我的问题是QEMU使用了100%的CPU。我正在学习Assembly编程课程,并被告知那是不正常的(这也是为什么我使用VM的原因)……

我不确定问题是从哪里来的,这是VirtualBox(安装了来宾添加程序)还是QEMU的配置问题?

QEMU使用以下参数启动:

export QEMU_AUDIO_DRV=none
qemu-arm/arm-softmmu/qemu-system-arm -s -localtime -m 256 -M reptar -kernel u-boot-arm/u-boot -tftp . -serial mon:stdio -nographic

版本为:

$ qemu-arm/arm-softmmu/qemu-system-arm --version
QEMU emulator version 2.4.1 (qemu-linaro from git), Copyright (c) 2003-2008 Fabrice Bellard

引导输出:

reptar-sp6-emul: sp6_emul_init
sp6_emul_init: failed to connect to SP6 server
sp6_emul_init: terminate thread


U-Boot 2016.09 (Sep 26 2018 - 17:19:23 +0200)

OMAP35XX-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 600 MHz
REDS Reptar board + LPDDR/NAND
I2C:   ready
DRAM:  256 MiB
NAND:  256 MiB
MMC:   OMAP SD/MMC: 0
Using default environment

Net:   smc911x-0
Reptar # 

1 个答案:

答案 0 :(得分:1)

即使来宾CPU正在做某事,QEMU仍将使用主机CPU,即使“某事”处于“紧密循环”中。如果来宾代码在其空闲循环中使用CPU指令WFI(“等待中断”),则QEMU将通过停止直到来宾中断发生来进行处理。 (WFI是Arm指令;对于其他来宾体系结构,通常有一个等效的指令,例如x86的HLT。)

因此,当来宾处于“空闲”状态时,QEMU是否使用100%CPU,取决于来宾的空闲循环的确切功能。像Linux这样的“真实操作系统”中的空闲循环将使用WFI(在真实硬件上使用WFI可以降低功耗),因此,在主机CPU使用率非常低的情况下,它们就会空闲。坐在u-boot提示符下的CPU使用率将取决于u-boot的编码方式。汇编代码中的CPU使用率取决于它的作用。