Using Zephyr as User OS¶
This tutorial describes how to run Zephyr as the User OS on the ACRN hypervisor. We are using Kaby Lake-based NUC (model NUC7i5DNHE) in this tutorial. Other ACRN supported platforms should work as well.
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 OS¶
- Build Zephyr - Follow the Zephyr Getting Started Guide to setup the Zephyr development environment. - The build process for ACRN UOS 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 boot loader image - We can build grub2 bootloader for Zephyr using - boards/x86/common/scripts/build_grub.shwhich locate in Zephyr Sourcecode.- $ ./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.elfand- grub_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.cfgcontaining 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 SOS, then you will need to transfer this image to the ACRN SOS (via, e.g, a USB stick or network )
- Follow Using SDC Mode on the NUC to boot “The ACRN Service OS” based on Clear Linux OS 28620 (ACRN tag: acrn-2019w14.3-140000p) 
- Boot Zephyr as User OS - On the ACRN SOS, 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.imgcreated in the above section into directory- zephyr.- Run the - launch_zephyr.shscript to launch Zephyr as UOS.- $ sudo ./launch_zephyr.sh - Then Zephyr will boot up automatically. You will see a console message from the hello_world sample application: - Hello World! acrn