Я пишу операционную систему в учебных целях, я сосредоточен на RasPberry Pi3 в качестве целевой машины.Чтобы проверить мой код, я решил использовать QEMU для эмуляции оборудования Raspberry.Кстати, вопрос не в малине, а в эмуляции ARM в целом или каково стандартное поведение QEMU.Проблема в том, что когда я запускаю свое ядро с помощью команды:
qemu-system-aarch64 -M raspi3 -monitor stdio -d in_asm -kernel kernel8.img
, у меня есть 4 ядра моей хост-машины (x86_64 под управлением linux) при 100% использования.
Если быть более точным, мое ядро вообще не ядро!Это всего лишь две строки сборки того, что будет являться загрузчиком ядра:
.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 или versatilepb мало помогает, загрузка ЦП ниже, но все еще высока (в среднем 70%).Использование общей эмуляции ARM «-M virt» снижает нагрузку на ЦП, но при этом одно ядро всегда на 100%, а другое - на 50%.
Это нормально ??Требует ли эмуляция ARM на x86 такой большой загрузки ЦП, учитывая чрезвычайную простоту кода, который я эмулирую?