ACRN v0.4 (Dec 2018)

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

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 What is 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, and documentation. You can either download this source code as a zip or tar.gz file (see the ACRN v0.4 GitHub release page or use Git clone and checkout commands:

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

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

Version 0.4 new features

  • 1824 - implement “wbinvd” emulation
  • 1859 - Doc: update GSG guide to avoid issue “black screen”
  • 1878 - The “Using Ubuntu as the Service OS” tutorial is outdated and needs to be refreshed
  • 1926 - kernel-doc causing make doc failure (because of upcoming Perl changes)
  • 1927 - Simplify the launch_uos.sh script by pointing at the latest iot-lts2018 kernel by default

Fixed Issues

  • 677 - SSD Disk ID is not consistent between SOS/UOS
  • 1777 - After UOS plays video for several minutes, the UOS image will be stagnant
  • 1778 - MSDK: 1080p H264 video decode fails in UOS
  • 1779 - gfxbench cannot run in SOS&UOS
  • 1781 - Can not recognize the SD card in the SOS
  • 1792 - System hang and reboot after run “LaaG Forced GPU Reset: subtest error-state-capture-vebox” in UOS
  • 1794 - After SOS boots up, there’s no output on SOS screen
  • 1795 - SOS fails to get IP address
  • 1825 - Need to clear memory region used by UOS before it exit
  • 1837 - ‘acrnctl list’ shows incomplete VM names

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.

1775 - [APL UP2]ACRN debugging tool - acrntrace cannot be used in SOS

There are no acrntrace devices “acrn_trace*” under SOS /dev.

Impact: acrntrace cannot be used in SOS.

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

1776 - [APL UP2]ACRN debugging tool - acrnlog cannot be used in SOS

There are no acrnlog devices “acrn_hvlog*” under SOS /dev.

Impact: acrnlog cannot be used 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 issues 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 issues will be fixed in the next release.

1796 - APL NUC fails to reboot sometimes

After APL NUC boots to SOS, the “reboot” command sometimes fails to reboot the SOS.

Impact: Cannot reboot SOS.

Workaround: Power off and boot again. The issues will be fixed in the next release.

1986 - UOS will hang once watchdog reset triggered

If Launching UOS with “-s 8,wdt-i6300esb”, UOS will hang if the watchdog reset is triggered.

Impact: UOS cannot self-recover after a watchdog reset is triggered.

Workaround: None.

1987 - UOS will have same MAC address after launching UOS with virio-net

After launching UOS with virio-net, UOS on different devices have the same MAC address.

Impact: A UOS network conflict will exist.

Workaround: None. This issues will be fixed in 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.

2000 - After launching UOS with Audio pass-through, Device (I2C0) doesn’t exist in UOS DSDT.dsl

After launching UOS with Audio pass-through, Device (I2C0) doesn’t exist in UOS DSDT.dsl

Impact: Cannot use Audio device

Workaround: None.

2030 - UP2 fails to boot with uart=disabled for hypervisor

SOS boots up fail following GSG document guide.

Impact: SOS boots up fail on APL UP2

Workaround: A step-by-step workaround has been updated in Github issue.

2031 - UP2 serial port has no output with uart=mmio@0x91622000 for hypervisor

After SOS starts, there’s no display on the screen. Though ssh connection is successful, the serial port has no output.

Impact: UP2 serial port has no output

Workaround: A step-by-step workaround has been updated in Github issue.

Change Log

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

  • 7ee0e2e2 tools: acrnctl: Fix path error when run “acrnctl add” cmd
  • 9761eede hv: cleanup IA32_PAT emulation code r.w.t. to the refactored guest_msrs[]
  • b6aaf1b8 hv: MSRs may need isolation between normal and secure world
  • 92bbb545 hv: rearrange data structure for emulated MSRs
  • 7fce2462 dm: apply new mevent API to avoid race issue in mei
  • 64d9c59a dm: enhance the mevent API
  • eec3a342 dm: fix the race issue in mevent_del
  • 87e7bdb9 DM: updating launch_uos.sh
  • 9e0562f4 hv: add obvious comment for empty else clause following else if
  • d36b44f2 hv: avoid to use ++ or -- operators in an expression
  • f33edc67 hv: fix reference parameter to procedure is reassigned
  • 36be890e hv: fix included file not protected with #define
  • ae9d4361 hv: minimize the case of “identifier reuse”
  • 3afc5113 hv: acpi: remove weak parse_madt
  • c616a422 hv: fix string assigned to non const object
  • c3799146 hv: remove “i915.enable_initial_modeset”
  • c3c93202 hv: fix “Array has no bounds specified” in vmsr.c
  • 01cb6ba8 hv: fix one MISRA-C violation in mtrr.c
  • fe1ace4f doc: fix doc misspellings
  • fa99dba3 Update doc/getting-started/apl-nuc.rst
  • f657f401 doc: update gsg to adapt latest release
  • e24039a7 doc: tweak CSS for doxygen API usability
  • 3ca64c5b dm: add “break” removed by mistake.
  • 908acb50 hv: add ‘no-omit-frame-pointer’ in debug version
  • 9bb16bce hv: fix type conversion without cast with explicit conversion
  • 79463fd5 hv: avoid using of mixed mode arithmetic
  • 9c133c7b hv: lib: refine print_decimal
  • 7a62154e hv: remove the theoretic infinite loop
  • 5d19962d security: remove cflag _FORTIFY_SOURCE in hypervisor
  • d737d6e6 tools: acrnlog: give user hint when acrn hvlog devices not found
  • d85a0b70 tools: acrntrace: give user hint when acrn trace devices not found
  • 9ea93ce6 hv: x2APICv support on platforms without support for APICv reg virtualization
  • 9d4b5d7e DM USB: add some preparing time for xHCI emulation before resuming.
  • b159d66f DM USB: refine the polling thread for libusb events
  • 966c5872 DM USB: xHCI: fix potential NULL pointer issue.
  • 5b39fd0e DM USB: xHCI: fix error logic of allocating xHCI slot
  • 32c4ce9b DM USB: xHCI: refine the xHCI S3 process
  • 9e471d72 DM USB: xHCI: refine the PLC bit emulation logic during S3
  • 29e81501 DM USB: xHCI: refine error handling logic for ctrl transfer
  • f73cf211 hv: fix ‘Unused procedure parameter’
  • b261e74d dm: virtio poll mode support for RT
  • 7cc8566d hv: fixes related to unused API and uninitialized variable
  • f0d3f1c9 HV: Remove some comments for crypto library
  • d7232ebb hv: trusty: refine struct trusty_mem
  • 5fd6021d doc: hv: add comments to timer APIs for documentation
  • 2dbb0cba doc: fix citation references in modularity doc
  • e2a8989f doc: add a document on considerations and current status of hypervisor modularization
  • 3b54dd2a doc: add some “sudo” for code
  • 945fdd8a doc: update the directory to “~/”
  • 0ff74b13 doc: delete “install build tool” about
  • 1a959d0f doc: Update note for the directory of UOS image
  • e2e9a3e9 doc: Add the note for the directory of UOS image
  • 10522423 doc: add note for the directory of UOS image
  • 099c605e doc: Modify to “/boot/efi”
  • ceed3106 Update using_ubuntu_as_sos.rst
  • b1db77eb doc: Update the grub part and add code for NVMe
  • 4b2e7f11 Delete AGL about
  • be70145f Delete AGL about
  • 96a2946d Delete AGL about
  • 6c8c46af delete AGL about
  • ce89d26e Delete using_AGL_as_uos.rst
  • 3d96e356 Rename using_AGL_as_uos to using_AGL_as_uos.rst
  • 90c27157 Create using AGL as UOS
  • 2bc24f87 Upload the images for “using_AGL_as_uos”
  • 12e66b98 Update using_ubuntu_as_sos.rst
  • ecff0bf9 Update the layout of packages
  • 50f17832 Update using_ubuntu_as_sos.rst
  • 1afb0f13 Update using_ubuntu_as_sos.rst
  • 06b2ab55 Update using_ubuntu_as_sos.rst
  • e4941b22 Update using_ubuntu_as_sos.rst
  • 65f21a77 Update the version of Ubuntu to 18.04
  • abfa1c16 update the length of *
  • 1664ba5f Update using_ubuntu_as_sos.rst
  • f3527c63 Update using_ubuntu_as_sos.rst
  • e4b616d5 Update using_ubuntu_as_sos.rst
  • ab005bc8 Update using_ubuntu_as_sos.rst
  • 2d685a13 Update with Clear Linux 26440
  • b38629b8 hv: fix ‘Space missing before or after binary operator’
  • e32b2b4c hv: remove dead code
  • 42e38dfb hv: fix “No prototype for non-static function”
  • 48b3cd92 hv: fix “Expression is not boolean”
  • 11102cfa hv: change the param type of mmio_write**
  • daaff433 doc: upload the images of UP2’s serial port
  • 592bd513 doc: update the serial port part of UP2
  • dd43f3ba hv: replace CPU_PAGE_MASK with PAGE_MASK
  • 0f766ca6 hv: replace CPU_PAGE_SHIFT with PAGE_SHIFT
  • 2f15d356 hv: replace CPU_PAGE_SIZE with PAGE_SIZE
  • e8e25bd6 hv: clean up function definitions in sbuf.h
  • e7d1cdd9 HV: remove ignored pci device from acrn.conf
  • e2d09398 DM: remove ignored pci device from SOS bootargs
  • db4254e2 HV: find and hide serial PCI dev from service OS
  • 8d08ec30 HV: replace serial PCI MMIO base with BDF config
  • 10bde520 hv: other: fix “Procedure has more than one exit point”
  • fe3de679 hv: debug: fix “Procedure has more than one exit point”
  • 414860fb hv: dev: fix “Procedure has more than one exit point”
  • ba44417d hv: lib: fix “Procedure has more than one exit point”
  • 279808b2 hv: memory: fix “Procedure has more than one exit point”
  • ddb54836 hv: cpu: fix “Procedure has more than one exit point”
  • 7f08ad83 use 4 vqs
  • 33362968 change the vq count and vendor id
  • d495732c hv: remove unused flags related APIs in sbuf
  • aa9af273 modularization: boot component
  • b54f2331 modularization: boot component – move functions
  • 51bfafd6 modularization: boot component – move functions
  • 512dbb61 Kconfig: remove PLATFORM configuration option
  • 7eeeccdf Documentation: add more Kconfig options documentation
  • e1564edd hv: fix type conversion violations
  • a0582c99 hv: trusty: refine trusty memory region mapping
  • bd1c0838 hv: trusty: reserve memory for trusty
  • 9bf7dd5d Enable audio virtualization for AaaG
  • 79bf121e hv: throw GP for MSR accesses if they are disabled from guest CPUID
  • 3836d309 hv: code cleanup: vmsr.c
  • 36ba7f8a hv: clear CPUID.07H.EBX[2] to disable SGX from guests
  • 26dc54ce HV: allow disabling serial port via Kconfig
  • 584f6b72 doc: replace return with retval
  • 97eb72a4 doc: always use ‘None’ for functions not returning a value
  • cbe1b74e HDCP virtio back-end driver
  • fa012e69 CoreU virtio back-end driver
  • 7003afbe hv: msix: fix bug when check if msix table access
  • 5dcfc133 hv:Rename ptdev to ptirq for some APIs
  • 5b43aa8a hv:Rename ptdev to ptirq for some variables and structures
  • 10afa9bb HV: io: obsolete the valid field in vhm requests
  • db3c5746 hv: fix ‘Function return value potentially unused’
  • e0260b44 doc: add sphinx extension improving only directive
  • 0bc85d2e modularization: boot component - move files
  • 667e0444 hv: vpic: fix “Procedure has more than one exit point”
  • 17a6d944 hv: guest: fix “Procedure has more than one exit point”
  • c32d41a0 hv: irq: fix “Procedure has more than one exit point”
  • 8dfb9bd9 hv: dm: fix “Procedure has more than one exit point”
  • ab3d7c87 hv: boot: fix “Procedure has more than one exit point”
  • a1ac585b hv: add brackets to make operator expression more readable
  • aefe9168 Update ‘launch_uos.sh’ script for UEFI platforms
  • 839680f0 DM: build TPM2 ACPI table when TPM device enabled
  • aae70db6 DM: Add support for virtual TPM enabling
  • 7df90a25 DM: Support TPM2 CRB device virtualization
  • 4b83e37c DM: tpm emulator to communicate with swtpm
  • 1ba7cebb Update tools/README.rst
  • 419feb1a Documentation: add a README.rst to the tools/ folder
  • 6d6c5b95 [doc] Enhance Using partition mode on UP2 tutorial
  • d3d474cf Documentation generation: update kernel-doc script to latest
  • 2d2f96af hv: clean up function definitions in profiling.h
  • 14f30a23 hv: clean up function definitions in npk_log.h
  • 07956605 hv: clean up function definitions in trace.h
  • 637326bc hv: clean up function definitions in vuart.h
  • 7b74b2b9 hv: clean up function definitions in console.h
  • 649d0e32 hv: clean up function definitions in dump.h
  • 8920fbac hv: clean up function definitions in logmsg.h
  • 5b6c611a hv: msix: fix “Procedure has more than one exit point”
  • 2f33d1bc tools: acrn-manager: Fix acrnctl mistake displaying suspended to paused
  • e1d0f7e4 hv: instr_emul: fix decode_modrm no default case in switch statement
  • 042c3935 hv: trusty: fix get_max_svn_index return type inconsistent
  • c200c984 hv: include: remove name starts with underscore
  • 0100b5a2 HV: replace dynamic memory with static for crypto library
  • 2afa7173 hv: vlapic: fix “Procedure has more than one exit point”
  • 3d1332f3 tools: acrn-crashlog: refine the log storage
  • 06efc58a hv: assign: clean up HV_DEBUG usage related to vuart pin
  • c380ee9e hv:Revise sanitized page size
  • a5fd5524 debug: rename struct logmsg to struct acrn_logmsg_ctl
  • e555f75b debug: Remove early logbuf support
  • 9f13a51e hv: hypercall: VM management fix “Procedure has more than one exit point”
  • a7398e8a hv: hypercall: general fix “Procedure has more than one exit point”
  • b627c2c9 hv: switch IA32_TSC_AUX between host/guest through VM Controls
  • d0b37f8e hv: reloc: define data structure and MACRO when necessary
  • d043171d IOC mediator: Add VehicalSteeringWheelAngle signal to the whitelist
  • 580579a3 dm: mei: Use compare and swap primitive for refcnt.
  • b1047224 hv: assign: clean up HV_DEBUG usage related to shell
  • f21e36f4 hv: vioapic: clean up HV_DEBUG usage
  • a9312298 hv: irq: clean up HV_DEBUG usage
  • dfe48811 hv: vcpu: clean up HV_DEBUG usage
  • e49929a7 hv: ioapic: clean up HV_DEBUG usage
  • 9d529fb9 hv:use copy of guest’s memory block in ‘hcall_set_vm_memory_regions()’
  • 81db2422 hv: enhance Makefile to compile debug/release into 2 libraries
  • 19b35f97 acrn-dm: wait for monitor thread canceling finish
  • 02a89dd4 hv: lapic: fix a theoretic infinite loop when clear lapic isr
  • dbe3d986 hv: lapic: save lapic base MSR when suspend
  • b8a553d1 hv: lapic: remove union apic_lvt
  • 538ba08c hv:Add vpin to ptdev entry mapping for vpic/vioapic
  • 297a264a hv:Cleanup ptdev lock
  • b7bbf812 hv:Replace dynamic memory with static for ptdev
  • b0e1657b HV: Adding partition mode support for cb2_dnv
  • 664bc1ba HV: Partition mode source code file layout reorg
  • 031191db dm: apl-mrb: launch_uos: remove mei debug flags
  • 378afc50 dm: mei: fix clients scan in sysfs
  • 7bd2976f dm: mei: add zero termination to devpath
  • 87fbb700 dm: mei: fix double fw_reset on uos reboot
  • 844553ef dm: mei: check for state before link reset callback
  • 58ab26ea hv: code cleanup: msr.h
  • e8296dce hv: Add IO request completion polling feature
  • e350abe4 HV: handle adding ptdev entry failure cases
  • fe08a44e hv: doc: use doxygen-generated API docs in HLD for passthru
  • 973c616a doc: passthru: add structure and API docs
  • 4ec4ddc0 Documentation: clean-up of isolated README.rst files
  • 29f95021 hv: vtd: error handling revisit
  • c4490028 hv: vtd: defer dma remapping enabling until vm creation
  • 42e0e169 hv: vtd: init interrupt config when resume
  • 830b3aa0 hv: vtd: check vtd enabling status with spinlock
  • a2cb9c2b hv: vtd: add do_action_for_iommus
  • 32ed3d1a hv: vtd: move public API to the bottom part of the file
  • efb24923 hv: vtd: merge lines for a statement if needed.
  • e35a8e8c hv: vtd: typo fix
  • 611944c0 dm: Fix race between ioreq client destroy and access
  • 3b24c34c hv: msix: correctly determine when the guest is changing Message Data/Addr
  • c41c0dab hv: properly initialize MSI-X table
  • 53971e19 hv: fix 2 bugs in msix.c
  • 119eccfe hv: hypercall: clean up HV_DEBUG usage
  • fc9ec5d8 hv: Derive decryption key from Seed for Trusty to decrypt attestation keybox
  • 7978188c tools: acrn-manager: set MAX_NAME_LEN to 32
  • 5d013ed2 hv: vpci: revert the temporary workaround of handling I/O port CF9
  • fe9a340e hv: separate the PCI CONFIG_ADDR and CONFIG_DATA I/O port handlers
  • 8b4f3956 hv: PIO emulation handler is attached to I/O port number only
  • 2c581751 vmx: tiny fix for MACRO name and print format
  • 9c025190 hv: hv_main: clean up HV_DEBUG usage
  • 1018a31c HV: For NUC, use 0x3F8/IRQ4 as the vuart port base address/IRQ and use ttyS0 accordingly
  • e56a6b58 HV: For MRB, use 0x3E8/IRQ6 as the vuart port base address/IRQ.
  • 3b87e7c6 HV: Add vuart port base address/IRQ Kconfig options
  • b32e689a hypervisor: use “wbinvd” carefully in RT environment
  • 61e6c1f0 hv: reset VM ioreqs in reset_vm
  • 2fa67a44 HV: clear memory region used by UOS before it exit
  • 8fa16211 hv: partition mode also needs free vm id when shutdown vm
  • 9dacc4a5 tools:acrn-crashlog:fix potential issue
  • 6971cc83 hv: fix ‘(void) missing for discarded return value’
  • a646fcf7 hv: fix ‘No brackets to then/else’ in vpci code
  • bad813ea hv: fix MISRA-C violations in vpci code: Function pointer is of wrong type
  • d3f0edfe hv: fix MISRA-C violations in vpci code: 93S, 331S and 612S
  • f84f1a21 hv: fix MISRA-C violations in vpci code: implicit conversion
  • d97224a4 hv: fix integer violations
  • 7e6d0a21 HV:pic fix “Recursion in procedure calls found”
  • 0a9d6841 hv: instr_emul: clean up mmio_read/mmio_write
  • 2c7c909e hv: vtd: fix the pre-allocated context table number
  • 3731b4c0 hv: fix ‘(void) missing for discarded return value’
  • b3b24320 hv: fix possible inconsistent issue for ‘vm->hw.create_vcpus’
  • 7bb09f75 fix “Procedure is not pure assembler”
  • 91fb441d hv:add global lock for VM & vCPU management hypercalls
  • 15567535 hv: unify the function pointer assignment
  • 9a009bce hv:Replace dynamic memory with static for mmio
  • b5505c43 doc: tweaks to 0.3 release notes
  • a0345279 DM: update User OS launch script with v0.3 CL and kernel numbers
  • 1847497d Documentation: update GSG for release 0.3
  • 33137dc9 Documentation: adjust “Tracked-On” capitalization in documentation
  • f0ec5b26 doc: add Makefile option for singlehtml
  • d62196ac version: 0.4-unstable