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

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

  3. 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 and grub_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.

  4. Follow Install the Ubuntu Service VM on the NVMe disk to boot the ACRN Service VM.

  5. 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 directory vxworks (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: