4.10. Emulated targets¶
Some targets barebox runs on are virtualized by emulators like QEMU, which allows basic testing of barebox functionality without the actual hardware.
4.10.1. Generic DT image¶
Supported for ARM and RISC-V. It generates a barebox image that can
be booted with the Linux kernel booting convention, which makes
it suitable to be passed as argument to the QEMU -kernel
option
(as well as booted just like Linux from barebox or other bootloaders).
The device tree can be passed externally via QEMU’s -dtb
option, but
also the QEMU internal device tree can be used.
The latter can be very useful with VirtIO Support, because QEMU will fix up the virtio mmio regions into the device tree and barebox will discover the devices automatically, analogously to what it does with VirtIO over PCI.
4.10.2. labgrid¶
Labgrid is used to run the barebox test suite, both on real and emulated
hardware. A number of YAML files located in test/$ARCH
describe some
of the virtualized targets that barebox is known to run on.
Example usage:
# Run x86 VM runnig the EFI payload from efi_defconfig
pytest --lg-env test/x86/efi_defconfig.yaml --interactive
# Run the test suite against the same
pytest --lg-env test/x86/efi_defconfig.yaml
The above assumes that barebox has already been built for the
configuration and that labgrid is available. If barebox has been
built out-of-tree, the build directory must be pointed at by
LG_BUILDDIR
, KBUILD_OUTPUT
or a build
symlink.
Additional QEMU command-line options can be added by specifying
them after the --qemu
option:
# appends -device ? to the command line. Add --dry-run to see the final result
pytest --lg-env test/riscv/rv64i_defconfig.yaml --interactive --qemu -device '?'
Some of the QEMU options that are used more often also have explicit support in the test runner, so paravirtualized devices can be added more easily:
# Run tests and pass a block device (here /dev/virtioblk0)
pytest --lg-env test/arm/virt@multi_v8_defconfig.yaml --blk=rootfs.ext4
For a complete listing of possible options run pytest --help
.
4.10.3. MAKEALL¶
The MAKEALL
script is a wrapper around make
to more easily build
multiple configurations. It also accepts YAML Labgrid environment files
as arguments, which will cause it to build and then run the tests:
./MAKEALL test/mips/qemu-maltael_defconfig.yaml
This expects CROSS_COMPILE
(or CROSS_COMPILE_mips
) to have been
set beforehand to point at an appropriate toolchain prefix.
The barebox-ci container provides an easy way to run MAKEALL
against
all configurations supported by barebox, even if the host system
lacks the appropriate toolchains:
# Run MAKEALL and possibly pytest in the container
alias MAKEALL="scripts/container.sh ./MAKEALL"
# Build a single configuration
MAKEALL test/mips/qemu-maltael_defconfig.yaml
# Build all configurations for an architecture, no test
MAKEALL -a riscv
# Build all mips platforms that can be tested
MAKEALL test/mips/*.yaml