Files
u-boot/doc/board/emulation/script.rst
Simon Glass fae5a7c0fc scripts: build-qemu: Add --bootcmd option to pass bootcmd via fw_cfg
Add a --bootcmd option to the build-qemu script that allows passing a
boot command to QEMU via fw_cfg. The bootcmd is written to the
"opt/u-boot/bootcmd" fw_cfg entry, which can be read by U-Boot's
EVT_BOOTCMD handler.

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
2025-10-07 06:13:49 -06:00

125 lines
3.2 KiB
ReStructuredText

.. SPDX-License-Identifier: GPL-2.0+
Script for building and running
===============================
You may find the script `scripts/build-qemu` helpful for building and testing
U-Boot on QEMU.
If uses a settings file `~/.u_boot_qemu` to control how it works:
build_dir
base directory for building U-Boot, with each board being in its own
subdirectory
image_dir
directory containing OS images, containing a subdirectory for each distro
type (e.g. `ubuntu/`)
bzimage
path to a bzImage file to supply to boot x86 Linux
efi_image_file
output filename for the disk image containing an EFI app / payload
efi_dir
directory when pre-built UEFI images are kept, e.g. OVMF-pure-efi.i386.fd
sct_dir
directory when the UEFI Self-Certification Test (SCT) is kept
sct_mnt
temporary mount point for building SCT: note this requires sudo
A sample file is written if you don't have one, e.g.::
# U-Boot QEMU-scripts config
[DEFAULT]
# Set to the build directory where you build U-Boot out-of-tree
# We avoid in-tree build because it gets confusing trying different builds
# Each board gets a build in a separate subdir
build_dir = /tmp/b
# Image directory (for OS images)
image_dir = ~/dev/os
# Build the kernel with: make O=/tmp/kernel
bzimage = /tmp/kernel/arch/x86/boot/bzImage
# EFI image-output filename
efi_image_file = try.img
# Directory where OVMF-pure-efi.i386.fd etc. are kept
efi_dir = ~/dev/efi
# Directory where SCT image (sct.img) is kept
sct_dir = ~/dev/efi/sct
# Directory where the SCT image is temporarily mounted for modification
sct_mnt = /mnt/sct
Once configured, you can build and run QEMU for arm64 like this::
scripts/build-qemu -rsw
To pass a custom boot command to U-Boot via fw_cfg, use the `--bootcmd`
option::
scripts/build-qemu -rsw --bootcmd "echo Hello from QEMU; bootflow scan -lb"
This will cause U-Boot to execute the specified command instead of the default
autoboot behavior.
Options
~~~~~~~
Options are available to control the script:
-a <arch>
Select architecture (default arm, x86)
-B
Don't build; assume a build exists
-d/--disk DISK
Root disk image file to use with QEMU
-e/--sct-run
Package an run UEFI Self-Certification Test (SCT)
-E/--use-tianocore
Run Tianocore (OVMF) instead of U-Boot
-k
Use kvm - kernel-based Virtual Machine. By default QEMU uses its own
emulator
-o <os>
Run an Operating System. For now this only supports 'ubuntu'. The name of
the OS file must remain unchanged from its standard name on the Ubuntu
website.
-r
Run QEMU with the image (by default this is not done)
-R
Select OS release (e.g. 24.04).
-s
Use serial only (no display)
-S/--sct-seq SCT_SEQ
SCT sequence-file to be written into the SCT image if -e
-w
Use word version (32-bit). By default, 64-bit is used
--bootcmd BOOTCMD
U-Boot bootcmd to pass via fw_cfg. This allows passing a custom boot
command to U-Boot at runtime through QEMU's firmware configuration
interface. The bootcmd is written to the 'opt/u-boot/bootcmd' fw_cfg
entry and is read by U-Boot's EVT_BOOTCMD handler before the default
autoboot process runs.