zephyr/snippets/xen_dom0
Grzegorz Swiderski a795d28810 snippets: Initial HWMv2 support
Very simple adaptation to directly replace the use of HWMv1 board names
with the new identifiers:

   boards:
     <name>/<identifier>:
       append: ...

All snippets in-tree are aligned with this format where needed.

Since the `boards` key supports regex, appends can also be applied to
multiple targets grouped by board name, SoC, CPU cluster, or variant.
Later, this can be followed up with native support for these items in
the snippet schema.

Signed-off-by: Grzegorz Swiderski <grzegorz.swiderski@nordicsemi.no>
2024-03-01 15:50:07 +01:00
..
boards
README.rst
snippet.yml snippets: Initial HWMv2 support 2024-03-01 15:50:07 +01:00
xen_dom0.conf
xen_dom0.overlay

README.rst

.. _xen_dom0:

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:

.. code-block:: console

   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:

.. code-block:: console

    <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.