
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