Run VxWorks as the User VM¶
VxWorks* is a real-time proprietary OS designed for use in embedded systems requiring real-time, deterministic performance. This tutorial describes how to run VxWorks as the User VM on the ACRN hypervisor based on Ubuntu Service VM (ACRN tag v2.0).
Note
You’ll need to be a Wind River* customer and have purchased VxWorks to follow this tutorial.
Steps for Using VxWorks as User VM¶
Build VxWorks
Follow the VxWorks Getting Started Guide to set up the VxWorks development environment and build the VxWorks Image.
Note
- The following kernel configuration should be excluded:
INCLUDE_PC_CONSOLE
DRV_SIO_PCI_NS16550
SELECT_PC_CONSOLE_KBD
- The following kernel configuration should be included:
DRV_SIO_IA_NS16550
DRV_SIO_FDT_NS16550
- The following kernel configuration value should be set:
CONSOLE_BAUD_RATE = 115200
SYS_CLK_RATE_MAX = 1000
Build GRUB2 bootloader Image
We use grub-2.02 as the bootloader of VxWorks in this tutorial; other versions may also work.
$ curl ftp://ftp.gnu.org/gnu/grub/grub-2.02.tar.xz | tar xJv $ cd grub-2.02 $ ./autogen.sh $ ./configure --with-platform=efi --target=x86_64 $ make $ ./grub-mkimage -p /EFI/BOOT -d ./grub-core/ -O x86_64-efi -o grub_x86_64.efi \ boot efifwsetup efi_gop efinet efi_uga lsefimmap lsefi lsefisystab \ exfat fat multiboot2 multiboot terminal part_msdos part_gpt normal \ all_video aout configfile echo file fixvideo fshelp gfxterm gfxmenu \ gfxterm_background gfxterm_menu legacycfg video_bochs video_cirrus \ video_colors video_fb videoinfo video net tftp
This will build a
grub_x86_64.efi
image in the current directory.Preparing the Boot Device
$ dd if=/dev/zero of=VxWorks.img bs=1M count=35 $ mkfs.vfat -F 32 VxWorks.img $ sudo mount `sudo losetup -f -P --show VxWorks.img` /mnt
Create the following directories.
$ sudo mkdir -p /mnt/efi/boot $ sudo mkdir -p /mnt/kernel
Copy
vxWorks
andgrub_x86_64.efi
.$ sudo cp vxWorks /mnt/kernel/ $ sudo cp grub-2.02/grub_x86_64.efi /mnt/efi/boot/bootx64.efi
Create
/mnt/efi/boot/grub.cfg
containing the following:set default=0 set timeout=5 menuentry "VxWorks Guest" { multiboot /kernel/vxWorks }
Unmount the loopback device:
$ sudo umount /mnt
You now have a virtual disk image with bootable VxWorks in
VxWorks.img
.Follow Install the Ubuntu Service VM on the NVMe Disk to boot the ACRN Service VM.
Boot VxWorks as User VM.
On the ACRN Service VM, prepare a directory and populate it with VxWorks files.
$ mkdir vxworks && cd vxworks $ cp /usr/share/acrn/samples/nuc/launch_vxworks.sh .
You will also need to copy the
VxWorks.img
created in the VxWorks build environment into directoryvxworks
(via, e.g. a USB drive or network).Run the
launch_vxworks.sh
script to launch VxWorks as the User VM.$ sudo ./launch_vxworks.sh
Then VxWorks will boot automatically. You will see the prompt.
VxWorks 7 SMP 64-bit Copyright 1984-2019 Wind River Systems, Inc. Core Kernel version: 1.2.7.0 Build date: May 5 2019 21:40:28 Board: x86 Processor (ACPI_BOOT_OP) SMP/SMT CPU Count: 1 OS Memory Size: ~1982MB ED&R Policy Mode: Permanently Deployed Adding 9315 symbols for standalone. ->
Finally, you can type
help
to see available VxWorks commands.-> help help Print this list dbgHelp Print debugger help info edrHelp Print ED&R help info ioHelp Print I/O utilities help info nfsHelp Print nfs help info netHelp Print network help info rtpHelp Print process help info spyHelp Print task histogrammer help info timexHelp Print execution timer help info h [n] Print (or set) shell history i [task] Summary of tasks' TCBs ti task Complete info on TCB for task sp adr,args... Spawn a task, pri=100, opt=0x19, stk=20000 taskSpawn name,pri,opt,stk,adr,args... Spawn a task tip "dev=device1#tag=tagStr1", "dev=device2#tag=tagStr2", ... Connect to one or multiple serial lines td task Delete a task ts task Suspend a task tr task Resume a task Type <CR> to continue, Q<CR> or q<CR> to stop: