U-Boot can start and boot an OS in both qemu-x86 and qemu-x86_64 but it
is not perfect.
With both builds, executing the VESA ROM causes an intermittent hang, at
least on some AMD CPUs.
With qemu-x86_64 kvm cannot be used since the move to long mode (64-bit)
is done in a way that works on real hardware but not with QEMU. This
means that performance is 4-5x slower than it could be, at least on my
CPU.
We can work around the first problem by using Bochs, which is anyway a
better choice than VESA for QEMU. But this results in the Ubuntu
installer failing to boot via EFI. It isn't clear whether this due to
a problem with the UEFI GOP, or something else. It hangs before the
Ubuntu logo appears.
So this series is unfinished. I thought it best to post what is here in
the hope that others can help work out the kinks.
Simon Glass (18):
scripts: Add a script for building and booting QEMU
x86: Expand x86_64 early memory
RFC: x86: qemu: Switch to bochs display
x86: qemu: Enable dhrystone
x86: qemu: Avoid accessing BSS too early
x86: Drop mpspec from the SPL build
x86: Add some log categories
x86: Drop use of CONFIG_REALMODE_DEBUG
x86: Avoid clearing the VESA display
x86: Add 64-bit entries to the GDT
x86: Use defines for the cache flags
x86: spl: Drop duplicate CPU init
x86: Drop the message about features missing in 64-bit
x86: Include stdbool.h in interrupt header
x86: Tidy up the GDT size in start/16.S
x86: Disable paging before changing to long mode
x86: Use the same GDT when jumping to long mode
x86: Use a simple jump into long mode
MAINTAINERS | 8 ++
arch/x86/cpu/i386/call64.S | 35 +++----
arch/x86/cpu/i386/cpu.c | 18 +++-
arch/x86/cpu/qemu/qemu.c | 20 ++--
arch/x86/cpu/start.S | 4 +-
arch/x86/cpu/start16.S | 3 +-
arch/x86/include/asm/interrupt.h | 1 +
arch/x86/include/asm/processor.h | 5 +-
arch/x86/lib/Makefile | 2 +
arch/x86/lib/bios.c | 27 +++--
arch/x86/lib/bios_interrupts.c | 8 +-
arch/x86/lib/i8259.c | 2 +
arch/x86/lib/spl.c | 4 +-
configs/qemu-x86_64_defconfig | 10 +-
configs/qemu-x86_defconfig | 6 +-
doc/board/emulation/index.rst | 1 +
doc/board/emulation/script.rst | 61 +++++++++++
scripts/build-qemu.sh | 175 +++++++++++++++++++++++++++++++
18 files changed, 331 insertions(+), 59 deletions(-)
create mode 100644 doc/board/emulation/script.rst
create mode 100755 scripts/build-qemu.sh
--
2.34.1