Run Zephyr as the User VM¶
This tutorial describes how to run Zephyr as the User VM on the ACRN hypervisor. We are using Kaby Lake-based Intel NUC (model NUC7i5DNHE) in this tutorial. Other ACRN supported platforms should work as well.
Note
This tutorial uses the (default) SDC scenario. If you use a different scenario, you will need a serial port connection to your platform to see Zephyr console output.
Introduction to Zephyr¶
The Zephyr RTOS is a scalable real-time operating system supporting multiple hardware architectures, optimized for resource constrained devices, and built with safety and security in mind.
Steps for Using Zephyr as User VM¶
Build Zephyr
Follow the Zephyr Getting Started Guide to set up the Zephyr development environment.
The build process for ACRN User VM target is similar to other boards. We will build the Hello World sample for ACRN:
$ cd samples/hello_world $ mkdir build && cd build $ cmake -DBOARD=acrn .. $ make
This will build the application ELF binary in
samples/hello_world/build/zephyr/zephyr.elf
.Build grub2 bootloader image
We can build the grub2 bootloader for Zephyr using
boards/x86/common/scripts/build_grub.sh
found in the Zephyr source code.$ ./boards/x86/common/scripts/build_grub.sh x86_64
The EFI executable binary will be found at
boards/x86/common/scripts/grub/bin/grub_x86_64.efi
.Preparing the boot device
$ dd if=/dev/zero of=zephyr.img bs=1M count=35 $ mkfs.vfat -F 32 zephyr.img $ sudo mount `sudo losetup -f -P --show zephyr.img` /mnt
Create the following directories.
$ sudo mkdir -p /mnt/efi/boot $ sudo mkdir -p /mnt/kernel
Copy
zephyr.elf
andgrub_x86_64.efi
$ sudo cp boards/x86/common/scripts/grub/bin/grub_x86_64.efi /mnt/efi/boot/bootx64.efi $ sudo cp samples/hello_world/build/zephyr/zephyr.elf /mnt/kernel
Create
/mnt/efi/boot/grub.cfg
containing the following:set default=0 set timeout=10 menuentry "Zephyr Kernel" { multiboot /kernel/zephyr.elf }
Unmount the loopback device:
$ sudo umount /mnt
You now have a virtual disk image with a bootable Zephyr in
zephyr.img
. If the Zephyr build system is not the ACRN Service VM, then you will need to transfer this image to the ACRN Service VM (via, e.g, a USB drive or network)Follow Install the Ubuntu Service VM on the NVMe Disk to boot “The ACRN Service OS” based on Ubnuntu OS (ACRN tag: v2.2)
Boot Zephyr as User VM
On the ACRN Service VM, prepare a directory and populate it with Zephyr files.
$ mkdir zephyr && cd zephyr $ cp /usr/share/acrn/samples/nuc/launch_zephyr.sh .
You will also need to copy the
zephyr.img
created in the above section into directoryzephyr
.Run the
launch_zephyr.sh
script to launch Zephyr as User VM.$ sudo ./launch_zephyr.sh
Then Zephyr will boot automatically. You will see a console message from the hello_world sample application:
Hello World! acrn