Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® Advanced Virtualization Frameworks 2.0 General Availability 1: Release Notes

Date of this edition: July 13, 2022

The QNX Advanced Virtualization Frameworks enable you to build systems that abstract and share resources such as graphics, audio, and input devices between guests and the hypervisor host. Although this release focuses on Cockpit Domain Controllers (CDCs) with multiple displays involving QNX mission-critical software for instrument cluster and Android for infotainment, the frameworks apply to other markets such as medical and industrial control.

Target hardware

The binaries in the development packages are built for the AArch64 architecture and can run on AArch64 platforms with the appropriate SOC. This release was tested on the following hardware boards:

  • Qualcomm SA8155P Automotive Development Platform

Development hosts

You must install this software onto a development host that contains the following QNX software:

  • QNX Software Development Platform (SDP) 7.1 or QNX OS for Safety (QOS) 2.2.1, with a Conservative installation policy
  • QNX Hypervisor 2.2 or QNX Hypervisor for Safety 2.2
  • QNX SDP 7.1 Screen Update (BuildID 110)

The following host OSs are supported:

  • Microsoft Windows 10 Pro 64-bit or Windows 8.1 Pro 64-bit
  • macOS version 10.14 or 10.15
  • Linux: Red Hat Enterprise Linux 7 64-bit, Ubuntu Desktop 20.04, or Ubuntu Desktop 18.04 LTS 64-bit, on x86_64 processors

    Note: QNX SDP isn't supported on Linux on ARM processors.


Note:

Previous, experimental releases may conflict with production-ready software. To avoid problems, install this commercial release into a new, separate installation of the OS baseline, even if you already have one on your development host.

Changes to these notes since June 16, 2022 are highlighted below with this icon: New:


Software maturity

The software provided in this release is considered mature. It has undergone full testing and is stable overall but has some known issues, which are documented below.

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

Contents

What's in this release?

This General Availability 1 (GA1) release provides QNX Software Center packages that contain the QNX Advanced Virtualization Frameworks (QAVF) binaries. The following packages, found under Available > QNX Advanced Virtualization Frameworks > Products are included:

  • QNX Advanced Virtualization Frameworks 2.0:
    • com.qnx.qnx710.target.qavf.group (BuildID 20)

To see the contents of a package, right-click it in the QNX Software Center, choose Properties, then click Package Contents.

VirtIO support by framework

Some shared resource frameworks are based on specific versions, either official or unofficial (i.e., draft), of the VirtIO standard. Other frameworks aren't based on VirtIO; see the documentation for more details. Here, we list the ones that are in scope for GA1 and based on VirtIO, and which exact versions they support:

Framework name Description
Shared GPU and Display VIRTIO 1.1 5.7 GPU Device
Shared Audio Latest draft as per VIRTIO 1.2 Draft 01. When VIRTIO 1.2 is released as the official version, then the VIRTIO 1.1 devices will transition to VIRTIO 1.2.
Shared Input VIRTIO 1.1 5.8 Input Device
Virtual Socket VIRTIO 1.1 5.10 Socket Device

QAVF features and capabilities

Feature Capabilities
Android 12.1 AOSP guest support The shared frameworks have been implemented and tested to be compatible with an Android 12.1 AOSP guest running on a QNX Hypervisor host.
Graphics Sharing
  • Graphics virtualization via virtio-gpu
  • Guest and host interaction
  • Mesa VirGL implementation
  • Android Graphics Streaming Kit (GFXStream) implementation for OpenGL
Audio Sharing
  • Audio virtualization via virtio-snd, with audio control extensions
  • Audio sharing between host and guest
  • Audio capture in guest
System-wide Audio Management (SWAM) Android audio can be controlled by audio management. For example, a QNX application can trigger an audio event such as system warning chimes that pre-empt the Android audio (i.e., perform audio ducking) to various degrees.

Various modes are possible, including:

  • No ducking — the Door Open chime is heard simultaneously with the Android audio stream, which is not reduced in volume
  • Partial ducking — the Lane Departure alarm is heard simultaneously with the Android audio stream, which is partially reduced in volume
  • Full ducking — the Collision Warning alarm is heard and the Android audio stream is completely reduced in volume (muted)
Input Sharing
  • Input virtualization via virtio-input
  • Guest and host interaction
  • Touchscreen input:
    • Touch input can be shared between the QNX host and an Android guest on the same display.
    • Single touch is supported in the form of taps and swipes, as is multi touch in the form of pinching and expanding image regions.
Virtual Socket
  • Support for passing data between guest and host via virtio-vsock
  • gRPC over TCP/IP

Installing QAVF

QAVF must be installed, using the QNX Software Center, as an addon to a baseline OS installation that includes a QNX hypervisor product. To install the prerequisite QNX software:

  • If you're developing a product that does not need to be safety-certified, follow the installation instructions in the QNX Hypervisor 2.2 Release Notes. In this case, you will use QNX SDP 7.1 as the baseline OS.

    Note: When you install a new baseline, the QNX Software Center automatically enables the experimental packages setting. You should leave this setting enabled. For more information about installing the baseline product, see the QNX Software Center User's Guide.

  • If you're developing a product that needs to be safety-certified, follow the installation instructions in the QNX Hypervisor for Safety 2.2 Release Notes. In this case, you will use QOS 2.2.1 as the baseline OS.

    The same need to leave the experimental packages settings enabled, as explained in the note for the previous item, applies in this case also.

  • For this QAVF release, there's a Screen co-release. To install this component, follow the installation instructions in the Screen (BuildID 110) Release Notes.

You can now install QAVF. To do so:

  1. From the Available tab, expand the QNX Advanced Virtualization Frameworks item, then the Products item, and then choose the QNX Advanced Virtualization Frameworks 2.0 group package.

    Be sure to select BuildID 20, as this is the correct build number for GA1. The build number (or ID) is shown in brackets on the right side of the package listing.

  2. Click the Install button (on the right just below the package list area) and follow the QNX Software Center prompts to install QAVF.

    Installing this group package pulls in all other QAVF packages.

Fixed issues

This is the first GA release, so there are no fixed issues yet.

Known issues

This release contains the following known issues, not all of which are under the control of the QNX team:

  • In the virtio-snd reference in the User's Guide, there's a statement for the stream option that you must specify at least one and at most two streams. This isn't true; you can have more than two streams or you can have zero streams and just expose some controls. (Ref# J2918390)
  • New: The virtio-gpu vdev documentation has improper configuration examples, because they're missing some required options. If you use the exact configurations shown there, the guest's display may be blank or contain corrupted fonts.

    To use graphics sharing on Qualcomm, you must enable the force_gl_presenter option, regardless of the virtual rendering library used.

    If you're using the GFXStream library (libgfxstream.so), you must also enable the enable_gles_3_1 option. If you've configured Address Space Graphics (ASG) mode for this library (in the qvm configuration file), the current implementation requires that the device be an MMIO device, meaning you must define the loc and intr options. You can optionally set the vram_loc rendering option, as a hint about which guest-physical address range the shared memory should be mapped into, and vram_size to specify the size of this memory region. So in this case, your vdev configuration would look like the following:

    vdev virtio-gpu
      loc 0x1c160000
      intr gic:63
      gfxstream
      render_options -force_gl_presenter=1,-enable_gles_3_1=1,-vram_loc=0x300010000,-vram_size=1024GB
    

    When using pipe mode for the GFXStream library, force_gl_presenter and enable_gles_3_1 are the only rendering options required, and the device can be an MMIO or a PCI device. In the latter case, the loc and intr options aren't required.

    If you're using the VirGL library (libvirglrenderer.so), you must set the force_glsl_version option to make the library use version 120 of the OpenGL Shading Language (GLSL). So your vdev configuration would look like the following:

    vdev virtio-gpu
      virgl
      render_options -force_gl_presenter=1,-force_glsl_version=120
    

    For more information about these options, see the User's Guide. (Ref# J2918305, J2894626)

  • After rebooting the target board, the Google Maps map area occasionally becomes all black all of a sudden. This is an issue with the version of the Android automotive app launcher in 12.1 AOSP. (Ref# J2914641)

    Workaround: Go to other pages (i.e, other apps), then come back to Google Maps. The map will display properly.

    --> Doing a soft reboot of the hypervisor host or the Android guest, through the UI or through the reboot command, results in stability issues. (Ref# J2910964)

    Workaround: Do a hard reboot of the target instead.

    --> In the rear-seat display, guests can crash suddenly when one is playing video and the other is playing audio. (Ref# J2910780) --> The YouTube app continuously uses more and more memory when autoplay is enabled, and doesn't release the memory it uses when you exit it. If you start video playback with this app and don't manually skip forward or backward, allowing autoplay to keep playing new videos, eventually the app stops playback. (Ref# J2910698) --> After starting video playback in the rear-seat display, you can't stop playback or exit the video display. Also, if you touch the display during playback or wait until playback completes, the display gets messed up. (Ref# J2910584) --> The Cluster View button in the action bar and the view button in the Control Cluster app sometimes stop working and you can't switch views anymore. In this case, the Set Speed button also stops working. (Ref# J2910521) --> Video playback does not always work on YouTube. Sometimes, ads will play before the video, but the video will not load or play. The loading symbol (spinning circle) constantly spins. Other times, the video will play but it is choppy. (Ref# J2910428) --> After you start playing a video on one guest and then start playing another video on another guest, the audio from one guest goes silent. Sometimes, but not always, after one guest finishes playback, the audio on the other is restored. This issue is commonly seen when playing videos through the YouTube app. (Ref# J2910256) -->
  • On Qualcomm, if you play music in the Stylish Music Player, sometimes the audio stops working in both the guest and the host due to a three-hour playback limitation in the Qualcomm BSP. This can happen sooner than three hours after you start playing music. (Ref# J2905286)

    Workaround: Contact Qualcomm to obtain audio firmware without this limitation.

  • When you connect the target board to a router that assigns an IP address of the form 10.0.X.X to the hypervisor host, Google Maps doesn't start properly in the Android guest. The default map isn't shown initially and even when the gear is shifted into Drive (D), either the expected local map isn't shown or it's shown but the app displays the message Searching for GPS and the map isn't functional. This is a Google issue; they are probably blocking access to map data based on IP address. (Ref# J2904068)
  • The static IP address and the Static IP networking setting isn't retained when the system is rebooted. (Ref# J2903251) -->
  • If you access the Android search app, the virtual keyboard hides the Android Apps button and you can't easily go back to the main display. This is an issue with the Google code. (Ref# J2898675)

    Workaround: Click the Enter button on the virtual keyboard.

  • On Qualcomm, the audio service (io-audio) sometimes doesn't start successfully and instead crashes after a soft or hard reboot. (Ref# J2873904)

    Workaround: Before rebooting, you must explicitly terminate the audio service as follows:

    slay -f io-audio

Technical support

To obtain technical support for any QNX product, visit the Support area on our website (https://blackberry.qnx.com/en/support/qnx-support-overview). You'll find a wide range of support options, including community forums.