ACRN v0.6 (Feb 2019)

We are pleased to announce the release of Project ACRN version 0.6.

ACRN is a flexible, lightweight reference hypervisor, built with real-time and safety-criticality in mind, optimized to streamline embedded development through an open source platform. Check out the Introduction to Project ACRN for more information.

All project ACRN source code is maintained in the https://github.com/projectacrn/acrn-hypervisor repository and includes folders for the ACRN hypervisor, the ACRN device model, tools, and documentation. You can either download this source code as a zip or tar.gz file (see the ACRN v0.6 GitHub release page or use Git clone and checkout commands:

git clone https://github.com/projectacrn/acrn-hypervisor
cd acrn-hypervisor
git checkout v0.6

The project’s online technical documentation is also tagged to correspond with a specific release: generated v0.6 documents can be found at https://projectacrn.github.io/0.6/. Documentation for the latest (master) branch is found at https://projectacrn.github.io/latest/.

ACRN v0.6 requires Clear Linux OS version 27600 or newer. Please follow the instructions in the Getting started guide for Intel NUC.

Version 0.6 new features

Enable Privileged VM support for real-time UOS in ACRN: Initial patches to enable a User OS (UOS) running as a virtual machine (VM) with real-time characteristics, also called a “Privileged VM”. We’ve published a tutorial Using PREEMPT_RT-Linux for real-time UOS. More patches for ACRN real time support will continue.

Document updates: Several new documents have been added in this release, including:

  • 888 - Security: Service OS Support for Platform Security Discovery
  • 1498 - add watchdog MSI and INTR support in DM
  • 2056 - Enable SMAP in hypervisor
  • 2288 - Display interface - MIPI support
  • 2343 - Rework TMR and EOI_EXIT_BITMAP updating logic
  • 2344 - Add UP2 ACRN SBL binary to E2E build
  • 2358 - Remove the flooding kernel message from vhm for memory setup
  • 2395 - change DISCARD to synchronous mode
  • 2351 - Enable post-launched hybrid mode

Fixed Issues

  • 1775 - [APL UP2]ACRN debugging tool - acrntrace cannot be used in SOS
  • 1776 - [APL UP2]ACRN debugging tool - acrnlog cannot be used in SOS
  • 1796 - APL NUC fails to reboot sometimes
  • 2043 - Fix incorrect vm_id captured when sampling PMU data
  • 2086 - enable/disable snoop control bit per vm
  • 2157 - Profiling: fix the profiling tool crash by page faults
  • 2168 - Modify Makefile to save debug files
  • 2200 - Won’t build using ubuntu 16.04 LTS and binutils 2.26.1
  • 2237 - Don’t export two dma_bufs for the same importer in sos kernel
  • 2257 - Profiling code clean up
  • 2277 - [APLNUC]Launch UOS with 5G memory will hang 2 minutes
  • 2298 - Hardcodes path to iasl
  • 2341 - vm exit trace position is not correct
  • 2349 - SOS failed boot up with RELOC config enabled.
  • 2355 - Switch the default up-notification vector from 0xF7 to 0xF3
  • 2356 - fail to start UOS on the renamed device name of VHM module
  • 2371 - kconfig oldconfig doesn’t work correctly
  • 2389 - Need to add the dependency of $(LIB_FLAGS)
  • 2410 - Launch UOS will occur page fault error when use the hypervisor build on Ubuntu
  • 2427 - Remove redundant apicv code from legacy vInterrupt inject path

Known Issues

1319 - SD card pass-through: UOS can’t see SD card after UOS reboot.

SD card could not be found after UOS reboot in pass-through mode.

Impact: There is no SD card after UOS reboot.

Workaround: None. The issue will be fixed in the next release.

1773 - USB Mediator: Can’t find all devices when multiple usb devices connected[Reproduce rate:60%]

After booting UOS with multiple USB devices plugged in, there’s a 60% chance that one or more devices are not discovered.

Impact: Cannot use multiple USB devices at same time.

Workaround: Unplug and plug-in the unrecognized device after booting.

1774 - UOS can’t stop by command: acrnctl stop [vm name] in SOS

After launching UOS in SOS by “acrnctl start” command, UOS VM failed to be stopped by “acrnctl stop” command.

Impact: Can’t stop UOS in SOS.

Workaround: None. The issue will be fixed in the next release.

1780 - Some video formats cannot be played in SOS

Video files with these encodings are not supported in the SOS: H265_10bits, VP8, VP9, VP9_10bits, H265.720p.

Impact: Cannot play those formats of videos in SOS.

Workaround: None. The issue will be fixed in the next release.

1782 - UOS failed to get IP address with the pass-through network card

After a network card is pass-through to UOS, it fails to get an IP address in UOS.

Impact: Cannot use network in UOS.

Workaround: None. The issue will be fixed in the next release.

1991 - Input is useless in UART Console for corner case

Input is useless in UART Console for a corner case, demonstrated with these steps:

  1. Boot to SOS
  2. ssh into the SOS.
  3. use “./launch_UOS.sh” to boot UOS.
  4. On the host, use “minicom -s dev/ttyUSB0”.
  5. Use “sos_console 0” to launch SOS.

Impact: Failed to use UART for input in corner case.

Workaround: Enter other keys before typing Enter.

1996 - There is an error log when using “acrnd&” to boot UOS

An error log is printed when starting acrnd as a background job (acrnd&) to boot UOS. The UOS still boots up normally, but prints: “Failed to open the socket(sos-lcs) to query the reason for the wake-up. Activating all vms when acrnd & to boot uos.”

Impact: UOS boots normally, but prints an error log message.

Workaround: None.

2267 - [APLUP2][LaaG]LaaG can’t detect 4k monitor

After launching UOS on APL UP2 , 4k monitor cannot be detected.

Impact: UOS can’t display on a 4k monitor.

Workaround: Use a monitor with less than 4k resolution.

2276 - OVMF failed to launch UOS on UP2.

UP2 failed to launch UOS using OVMF as virtual bootloader with acrn-dm.

Impact: UOS cannot boot up using OVMF

Workaround: Use VSBL as virtual bootloader

2278 - [KBLNUC] Cx/Px is not supported on KBLNUC

C states/P states is not supported on KBL NUC.

Impact: Power Management states related operations cannot be using in SOS/UOS on KBLNUC

Workaround: None

2279 - [APLNUC]After exiting UOS with mediator Usb_KeyBoard and Mouse, SOS cannot use the Usb_KeyBoard and Mouse

After exiting UOS with mediator Usb_KeyBoard and Mouse, SOS cannot use the Usb_KeyBoard and Mouse. Reproduce Steps as below:

  1. Insert USB keyboard and mouse in standard A port (USB3.0 port)

  2. Boot UOS by sharing the USB keyboard and mouse in cmd line:

    -s n,xhci,1-1:1-2:1-3:1-4:2-1:2-2:2-3:2-4 \

  3. UOS access USB keyboard and mouse.

  4. Exit UOS.

  5. SOS access USB keyboard and mouse.

Impact: SOS cannot use USB keyboard and mouse in such case.

Workaround: Unplug and plug-in the USB keyboard and mouse after exiting UOS.

2338 - [UP2]Lost 2G memory in SOS when using SBL as bootloader on UP2.

After using SBL as bootloader to boot UP2, SOS only has 2G memory with 4G physical memory bank.

Impact: lost 2G memory in SOS.

Workaround: Modify SBL Memory setting file “CfgData_Ext_Up2.dlt”, see details in issue comments.

2516 - [UP2][SBL] System hang with DP monitor connected
For UP2, system will occur crash when DP monitor is connected. It will be triggered immediately by running command “cat /sys/kernel/debug/dri/0/i915_display_info” in SOS.

Impact: Cannot use DP monitor.

Workaround: Remove enable_initial_modeset for UP2 platform. You can apply 4b53ed67 to rebuild UP2 images.

2522 - [NUC7i7BNH]After starting ias in SOS, there is no display

On NUC7i7BNH, after starting IAS in SOS, there is no display if the monitor is connected with a TPC to VGA connector.

Impact: Special model [NUC7i7BNH] has no display in SOS.

Workaround: None.

2523 - UOS monitor does not display when using IAS

There is no UOS display after starting IAS weston.

Impact: Cannot use ias weston in UOS.

Workaround:

  1. Use weston instead of IAS weston: swupd install x11-server

  2. Use acrn-kernel to rebuild SOS kernel to replace integrated kernel. To confirm “DRM_FBDEV_EMULATION” related configs in kernel_config_sos should as below:

    CONFIG_DRM_KMS_FB_HELPER=y
    CONFIG_DRM_FBDEV_EMULATION=y
    CONFIG_DRM_FBDEV_OVERALLOC=100
    

The issue will be fixed in the next release.

2524 - [UP2][SBL] Launching UOS hang while weston is running in SOS

When using weston in SOS, it will hang during the UOS launch.

Impact: launching UOS hang, and then no display in UOS.

Workaround: Use acrn-kernel to rebuild SOS kernel to replace the integrated kernel. Confirm “DRM_FBDEV_EMULATION” related configs in kernel_config_sos are as below:

CONFIG_DRM_KMS_FB_HELPER=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100

The issue will be fixed in the next release.

2527 - [KBLNUC][HV]System will crash when run crashme (SOS/UOS)

System will crash after a few minutes running stress test crashme tool in SOS/UOS.

Impact: System may crash in some stress situation.

Workaround: None

2528 - [APLUP2] SBL (built by SBL latest code) failed to boot ACRN hypervisor

SBL built by latest slimbootloader code (HEAD->ad42a2bd6e4a6364358b9c712cb54e821ee7ee42) failed to boot acrn hypervisor.

Impact: UP2 with SBL cannot boot acrn hypervisor.

Workaround: Use SBL built by earlier slimbootloader code (commit id:edc112328cf3e414523162dd75dc3614e42579fe). This folder version can boot acrn hypervisor normally.

Change Log

These commits have been added to the acrn-hypervisor repo since the v0.5 release in Jan 2019 (click on the CommitID link to see details):

  • ea250c51 doc: fixes to rt-linux tutorial
  • 1a4a1c30 Need to delete ‘# CONFIG_BLK_DEV_NVME is not set’ to enable NVME driver
  • 37ce259f modify create-up2-images scripts
  • eb7091bb HV: add rdmsr/wrmsr debug cmd
  • 648450c6 HV: cpu: add msr_read_pcpu()& msr_write_pcpu()
  • 39ffd29a schedule: add magic number at the bottom of schedule stack
  • efc64d77 hv: fix host call stack dump issue
  • 5214a60b hv: replace improper use of ASSERT with panic for parse_madt
  • 9291fbe4 hv: multiboot: replace improper use of ASSERT with panic
  • 2474c601 hv: replace improper use of panic with ASSERT
  • a01c3cb9 doc: change term of vm0 to sos_vm
  • 7da9161d hv:no need to use lock for the bit operations of local variable
  • e2cb6acb doc: add Trusty ACRN doc
  • 9c3c316f doc: add rt-linux tutorial
  • 0881bae7 doc: fix correct use of Clear Linux OS
  • fc887ead doc: update coding guidelines
  • 72faca50 doc: update documents for “–lapic_pt” feature
  • 2ffc683d hv: move some api declaration from mmu.h to ept.h
  • 615c2bf8 hv:move e820 related macro and structure to e820.h
  • 2b2dbe43 hv:move some files to guest folder
  • e9bb4267 hv:move vpic.h & vioapic.h to dm folder
  • 89b6dc59 HV: MISRA clean in reloc.c
  • 723ff1f4 HV: modularization improve UEFI macro control code
  • 2a25f4e9 Doc: Remove CL release number from GSG document
  • fea541bd hv: exception: low prioirity exception inject fix
  • c6d2908f hv: vmexit: add handler for vmexit not supported for guest
  • cc2c0c3a hv:Move several inline APIs from vm.h to *.c
  • 61552458 Kconfig: enlarge range of maximum number of IOMMU
  • 69371f41 EFI: fix potential memory overwrite due to mmap table
  • b038ade2 hv: fix misra-c violations in reused partition mode functions
  • 7d4ba5d7 Documentation build tools: update min version for kconfiglib
  • 878c4e2d dm: add example script to launch vm for realtime scenarios
  • c873d60a dm: add option “lapic_pt” to create VM for realtime scenarios
  • 8925da64 dm: adapt mptable generation for VM with lapic pt
  • e2cecfb5 hv: send IPI instead of irq injection to notify vcpu with lapic pt
  • 16df57aa hv: don’t remap msi for pt devices if lapic_pt
  • a073ebee hv: extend lapic pass-through for DM launched VM
  • c853eb4b hv: remove redundant code for virtual interrupt injection
  • 6d5456a0 hv: Bit Representation for IOAPIC RTE
  • 7d57eb05 hv: Add bit representation for MSI addr and data
  • 68250430 hv:Move severl variable declaration for boot code
  • c20d095a HV: refine sos_vm config header
  • 66e00230 HV: sanitize vm config
  • 285b64fa replace arch_switch_to with pure asm code instead of inline asm
  • c233bf54 make sure secondary CPU’s stack is aligned with CPU STACK
  • ee066a7f hv: fix possible buffer overflow in ‘vcpu_set_eoi_exit()’
  • 88eeae3f hv: remove unused fields in ‘struct acrn_vcpu’
  • 5e99565b security: Increase buffer size to avoid buffer overflow error
  • d0eb83aa HV: move Kconfig IOREQ_POLLING to acrn vm config
  • 6584b547 Makefile: add missing dependency
  • c43bca9c doc: add a FAQ doc
  • bb8f5390 doc: add AGL as VMs on ACRN doc
  • 5c5f4352 HV: modify RELOC kconfig option default to “enable”
  • 8f22a6e8 HV: fix per-cpu stack relocation in trampoline.c
  • 41dd38ba HV: init_paging() wrongly calcuate the size of hypervisor
  • 9feab4cf HV: adjust the starting addr of HV to be 2M-aligned
  • 07f14401 HV: save efi_ctx into HV to use after init_paging()
  • a445a4ea EFI: Allocate EFI boot related struct from EFI allocation pool
  • ad0f8bc3 EFI: Allocate 2M aligned memory for hypervisor image
  • 912be6c4 tools: respect CFLAGS and LDFLAGS from environment
  • 899c9146 hv:Fix MISRA-C violations in vm.h
  • 5ba4afcf Use $(MAKE) when recursing
  • d0c9fce7 doc: add more rules in coding guidelines
  • 3c605127 io_emul: reorg function definition to pass partition mode build
  • 15030f6f io_emul: reshuffle io emulation path
  • fb41ea5c io_emul: remove pending_pre_work
  • 4fc54f95 schedule: add full context switch support
  • 21092e6f schedule: use per_cpu idle object
  • 5e947886 hv: vlapic: remove calcvdest
  • fd327920 kconfig: update .config on missed or conflicting symbol values
  • ca925f0d dm: storage: change DISCARD to synchronous mode
  • 46422692 dm: vhpet: add vHPET support
  • 0343da8c dm: vhpet: add HPET-related header files
  • 3fe4c3f2 dm: provide timer callback handlers the number of expirations
  • 0f7535fd dm: add absolute timer mode
  • d1e1aa30 dm: create mevent’s pipe in non-blocking mode
  • a9709bf8 hv: Makefile: add the dependency of $(LIB_FLAGS)
  • b489aec3 hv: idt: separate the MACRO definition
  • 862ed16e Makefile: add rules for installing debug information
  • 173b534b HV: modularization cleanup instr_emul header file
  • 18dbdfd5 HV: replace lapic_pt with guest flag in vm_config
  • 68aa718c HV: replace bootargs config with acrn_vm_os_config
  • 23f8e5e5 HV: replace memory config with acrn_vm_mem_config
  • 253b2593 HV: remove vm_config pointer in acrn_vm struct
  • 7bf9b1be HV: enable pcpu bitmap config for partition mode
  • bc62ab79 HV: remove unused vm num config
  • 2e32fba5 HV: remove sworld_supported in acrn_vm_config
  • ec199d96 HV: add get_sos_vm api
  • f3014a3c HV: show correct vm name per config
  • e6117e0d HV: refine launch vm interface
  • 49e6deaf HV: rename the term of vm0 to sos vm
  • 55e5ed2e hv:move ept violation handler to io_emul.c
  • 1d98b701 hv: move ‘setup_io_bitmap’ to vm.c
  • de4ab6fd hv:modulization for IO Emulation
  • 808d0af2 HV: check to avoid interrupt delay timer add twice
  • d9c38baf HV: remove unused mptable info
  • a8e4f227 HV: add new acrn_vm_config member and config files
  • c4a230f3 HV: rename the term of vm_description to vm_config
  • fe35dde4 Makefile: support SBL binary for E2E build
  • 13c44f56 acrn/dm: Check device file of /dev/acrn_hsm to determine the path of offline VCPU
  • ca328816 acrn/dm: Add the check of acrn_vhm/acrn_hsm to open the VHM driver
  • e4a3a634 acrn/vhm: change the default notification vector to 0xF3
  • f45605dd HV: modularization to separate CR related code
  • 8265770f hv:Change acrn_vhm_vector to static
  • b22c8b69 hv: add more MSR definitions
  • 6372548e hv:Fix violation “Cyclomatic complexity greater than 20” in instr_emul.c
  • ae144e1a hv:fix MISRA-C violation in virq.c
  • 6641bc79 hv: remove ACRN_REQUEST_TMR_UPDATE and unnecessary codes
  • fc61536b hv: rework EOI_EXIT_BITMAP update logic
  • f15cc7d6 hv: set/clear TMR bit like hardware behave
  • c9b61748 hv: Make reserved regions in E820 table to Supervisor pages
  • 4322b024 version: 0.6-unstable