| .. _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 :zephyr_file:`snippets/xen_dom0/boards/` |
| 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 :file:`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. |
| |
| .. _zephyr-xenlib: https://github.com/xen-troops/zephyr-xenlib |