u-boot fails to boot for qemu on x86_64 platform

u-boot fails to boot for qemu on x86_64 platform
typescript
Ethan Jackson

I have compiled u-boot from source for x86_64 platform.

git clone https://source.denx.de/u-boot/u-boot.git cd u-boot make qemu-x86_64_defconfig

The u-boot.bin binary is generated successfully. However when I tried to load u-boot.bin, it failed to load.

$ qemu-system-x86_64 -nographic -bios u-boot.bin -M q35 qemu: could not load PC BIOS 'u-boot.bin'

When tried with u-boot.com, we found same error. I have used similar steps for ARM platform and it works fine.

$qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -bios u-boot.bin U-Boot 2019.01 (Mar 06 2025 - 12:20:02 +0530) DRAM: 128 MiB Flash: 128 MiB *** Warning - bad CRC, using default environment In: pl011@9000000 Out: pl011@9000000 Err: pl011@9000000 Net: No ethernet found. Hit any key to stop autoboot: 0 =>

Answer

Instead of using the raw u-boot.bin file, you need to use u-boot.rom which is properly formatted for x86_64 BIOS

make qemu-x86_64_deconfig make

after build, look for the u-boot.rom file in your build directory and use that with QEMU

qemu-system-x86_64 -nographic -bios u-boot.rom -M q35

if you don't see a u-boot.rom file, you might need to explicitly build it:

make u-boot.rom

OR, if you want to use you existing u-boot.bin, you might need to specify it as a -kernel parameter instead of -bios

qemu-system-x86_64 -nographic -kernel u-boot.bin -M q35

Related Articles