Xen Dom0: universal snippet for XEN control domain

Overview

This snippet allows user to build Zephyr as a Xen initial domain (Dom0). The feature is implemented as configuration snippet to allow support for any compatible platform.

How to add support of a new board

  • add board dts overlay to this snippet which deletes/adds memory and deletes UART nodes;

  • add correct memory and hypervisor nodes, based on regions Xen picked for Domain-0 on your setup.

Programming

Correct snippet designation for Xen must be entered when you invoke west build. For example:

west build -b qemu_cortex_a53 -S xen_dom0 samples/synchronization

QEMU example with Xen

Overlay for qemu_cortex_a53 board, that is present in board/ directory of this snippet is QEMU Xen control domain example. To run such setup, you need to:

  • fetch and build Xen (e.g. RELEASE-4.17.0) for arm64 platform

  • take and compile sample device tree from example/ directory

  • build your Zephyr sample/application with xen_dom0 snippet and start it as Xen control domain

For starting you can use QEMU from Zephyr SDK by following command:

<path to Zephyr SDK>/sysroots/x86_64-pokysdk-linux/usr/bin/qemu-system-aarch64 -cpu cortex-a53 \
-m 6G -nographic -machine virt,gic-version=3,virtualization=true -chardev stdio,id=con,mux=on \
-serial chardev:con -mon chardev=con,mode=readline -pidfile qemu.pid \
-device loader,file=<path to Zephyr app build>/zephyr.bin,addr=0x40600000 \
-dtb <path to DTB>/xen.dtb -kernel <path to Xen build>/xen

This will start you a Xen hypervisor with your application as Xen control domain. To make it usable, you can add zephyr-xenlib by Xen-troops library to your project. It’ll provide basic domain management functionalities - domain creation and configuration.