sel4test is a test suite for seL4.

First make sure you have set up your machine.

Getting the Code

mkdir sel4test
cd sel4test
repo init -u
repo sync
# apps/ CMakeLists.txt kernel libs/ projects/ tools/

This clones the seL4 kernel, the test suite, some libraries used by the tests, and some tools used in the build process. By default, the current master branch of the kernel is cloned. To clone a specific version of the kernel and compatible libraries and tools, replace the

repo init

line above with:

repo init -u -b refs/tags/

In this example we clone version of the kernel. For more information on version numbers, see ReleaseProcess.

Build it


The CMake build environment supports a number of platforms. For information regarding our supported hardware platforms and their corresponding CMake configuration arguments, see the Supported Platforms page. Platforms that we test and are in-regression are listed as being maintained by the seL4 Foundation.

To start a build with a specific configuration we can create a new subdirectory from the project root and initialise it with CMake:

# create build directory
mkdir build
cd build
# configure build directory

This configures your build directory with the necessary CMake configuration for your chosen platform.

You can look at and edit the CMake configuration options from your build directory using

ccmake .

It is also important to note that meta options such as PLATFORM and SIMULATION will override various settings in the seL4test build system in order to maintain the meta configuration. This can however be disabled if you first enable the Sel4testAllowSettingsOverride variable.

Useful configuration options

For an overview of the CMake build system and further configuration options, including configuring for cross compilation (targeting ARM), see seL4’s CMake Build System.


When you’ve configured the system, you can build it by running:


Running it

IA32 Example

We will now build seL4test for ia32, to run on the QEMU simulator.

Passing -DSIMULATION=TRUE to CMake produces a script to simulate our release ia32 build. The following commands will configure our CMake build:

mkdir ia32_build
cd ia32_build

Build it:


Executing the following commands will run qemu and point it towards the image we just built:

ELF-loading userland images from boot modules:
size=0x1dd000 v_entry=0x806716f v_start=0x8048000 v_end=0x8225000 p_start=0x21f000 p_end=0x3fc000
Moving loaded userland images to final location: from=0x21f000 to=0x12e000 size=0x1dd000
Starting node #0 with APIC ID 0
Booting all finished, dropped to user space
Starting test 18: BIND0001
Running test BIND0001 (Test that a bound tcb waiting on a sync endpoint receives normal sync ipc and notification notifications.)
Test BIND0001 passed
Starting test 19: BIND0002
Running test BIND0002 (Test that a bound tcb waiting on its bound notification recieves notifications)
Test BIND0002 passed
Starting test 20: BIND0003
Running test BIND0003 (Test IPC ordering 1) bound tcb waits on bound notification 2, true) another tcb sends a message)
Test BIND0003 passed

To exit qemu, press Ctrl-a, then x. The text string All is well in the universe indicates a successful build.

We can further configure the test suite build to print out JUnit-style XML. Thus enabling the output to be parsed by various tools. To do so, edit the build settings through ccmake, enabling the Sel4testAllowSettingsOverride and LibSel4TestPrintXML variables.

Testing a Customised Kernel

Suppose you’ve got seL4 checked out in ~/projects/seL4, and sel4test in ~/tests/sel4test, and you have been making changes on a feature branch of seL4 named awesome-new-feature. You want to test if your modified kernel still passes all the tests in sel4test.

cd ~/tests/sel4tests/kernel
git remote add feature ~/projects/seL4
git fetch feature
git checkout feature/awesome-new-feature
cd ..

Now the kernel in sel4test has been changed to your custom kernel. Now just build and run the test suite as above.

Running a subset of the tests

You can use a regular expression to select a subset of the tests. This can be configured by setting the CMake variable LibSel4TestPrinterRegex. We can modify this variable by running ccmake . in our build directory. By default the test suite runs all tests.