我正在编写一个用于学习目的的操作系统,我专注于将raspberry pi3作为目标计算机。为了测试我的代码,我决定使用QEMU模拟树莓派硬件。顺便说一句,问题不是关于树莓,而是关于ARM仿真或QEMU的标准行为。问题是当我使用以下命令启动内核时:
qemu-system-aarch64 -M raspi3 -monitor stdio -d in_asm -kernel kernel8.img
我有100%使用率的4个内核(运行Linux的x86_64)。
更确切地说,我的内核根本不是内核!内核的引导程序只有两行汇编:
.section ".text.boot"
.global _start
_start:
1: wfi
b 1b
因此,我认为问题不在代码中。这是kernel8.elf的转储
~> aarch64-elf-objdump -d kernel8.elf
kernel8.elf: file format elf64-littleaarch64
Disassembly of section .text:
0000000000080000 <__start>:
80000: d503207f wfi
80004: 17ffffff b 80000 <__start>
也在尝试更换机器,例如raspi2或Universalpb并没有多大帮助,CPU使用率较低,但仍然很高(平均70%)。使用通用的ARM仿真“ -M virt”可以减少更多的CPU使用率,但一个内核始终为100%,另一个内核始终为50%。
这正常吗?考虑到我所仿真的代码极其简单,在x86上仿真ARM是否需要大量的CPU使用??