Running u-boot's test suite

u-boot has a test suite that can run against Qemu, but it’s intimidating to get going. Here’s some minimal instructions:

Get the code

git clone git://

Install the python dependencies

You can choose which of these two work for you. I prefer installing the packages from Debian’s package manager (bullseye/testing works for me).

sudo apt install python3-atomicwrites python3-attr python3-coverage
python3-extras python3-fixtures python3-importlib-metadata python3-linecache2
python3-more-itertools python3-packaging python3-pbr python3-pluggy
python3-pyparsing python3-pytest python3-mimeparse python3-subunit python3-six
python3-testtools python3-traceback2 python3-unittest2 python3-wcwidth
virtualenv -p /usr/bin/python3 /tmp/venv
. /tmp/venv/bin/activate
cd u-boot
pip install -r test/py/requirements.txt

Get a ARM compiler

The easiest is to use one from your distro. Other options are to use buildman to download one, or get one from

apt install gcc-arm-linux-gnueabihf

Set up paths

I cloned the repos into to $SRC. If you set SRC to where you put them, you can cut/paste the lines below.


uboot-test-tools uses your hostname to determine which scripts to use. Lets pretend we’re running on travis, to debug CI failures:

ln -s $SRC/uboot-test-hooks/bin/travis-ci $SRC/uboot-test-hooks/bin/`hostname`

Another option would be to copy the travis-ci directory, so you can configure the scripts to be appropriate for your setup.


As we’re passing --build, this will build u-boot in a directory called build the current working directory.

CROSS_COMPILE="ccache arm-linux-gnueabi-" ./test/py/ --bd evb-ast2500 --id qemu --build-dir build --build

The board chosen is the ast2500-evb, which has upstream support in u-boot, uboot-test-tools and in Qemu as of 4.2.


If you are testing qemu changes against u-boot, you can set the qemu binary as follows:

cd $SRC/uboot-test-hooks
sed -i 's|qemu-system-arm|$HOME/qemu/arm-softmmu/$1/' bin/travis-ci/conf.evb-ast2400_qemu

This is where creating your own set of scripts instead of relying on the travis-ci configuration would make sense.

Written on February 4, 2020