http://qnx.com/developers/docs/7.1/index.html#com.qnx.doc.qavf.overview/topic/overview.html
目录
QNX Advanced Virtualization Frameworks Architecture
QNX Advanced Virtualization Frameworks Architecture
QNX高级虚拟化框架是在多个操作系统之间共享图形、音频和输入设备等资源的系统,同时将关键服务和非关键服务的管理分开,以减轻故障的影响。
如下图所示虚拟框架通过前端guest os和后端host os 对共享资源的实现qnx hypervisor 设计,这种设计可以减少guest os 对host os 影响,同时可以在一个ecu 上运行多个系统,从而节省硬件资源。host os 管理关键服务(即仪表盘),host 和 guest os 管理非关键服务(如信息娱乐)。
此版本侧重于具有多个显示器的驾驶舱域控制器(Cockpit Domain Controllers,CDC),但虚拟化框架也适用于医疗和工业控制等其他市场。
CDC默认设计将仪表盘放置在主机中,并在仪表板显示器上呈现仪表盘。这种设计提供了比将其放置在访客中更高的效率(例如,每帧绘制的CPU使用率更低),信息娱乐应用程序在Android客户机中运行,其他信息娱乐功能在QNX主机中运行,呈现在head unit 上,这样更安全。
此版本所针对的是一个承载一个Android客户机的QNX Hypervisor。QNX Hypervisor也支持其他客户机类型,如Linux和QNX Neutrino。
共享资源框架由虚拟设备(vdev)和/或服务组成,管理程序主机和客户机可以使用它们共享内容。虽然QNX Hypervisor支持通过vdev 实现基本和常见公共操作(如访问共享RAM和共享CPU),但汽车驾驶舱进一步实现的vdev来支持主机和访客之间的共享内容。QNX高级虚拟化框架在以下框架中提供vdev:
- Sensor Sharing
- Shared Audio
- Shared Filesystem
- Shared GPU and Display
- Shared Input
- Shared USB
- Shared Video and Camera
- Virtual Socket
Audio Sharing
共享音频框架允许连接到host 的访客捕获和输出音频。它通过提供一个音频虚拟设备来实现这一点,访客系统可以对该设备进行启动和停止这些操作,配置如采样率等参数。主机控制每个客户机允许哪些操作,以及每个客户机可以访问连接到主机的哪些物理设备。
共享音频框架使运行在虚拟机(VM)中的客户机能够访问在运行的主机中的音频驱动程序和服务,这需要在vm 中配置音频设备。
音频框架提供了一个虚拟设备(vdev)virtio-snd,使访客能够访问主机中的一个或多个音频硬件驱动程序提供的音频功能。此vdev基于VirtIO标准的非官方草案版本1.2。
主机管理访客和物理音频设备之间的所有交互:
- 管理程序主机拥有物理设备,并为这些设备运行驱动程序(deva-*)。
- VM中的客户机需要访问物理设备,VM会向客户机呈现音频vdev(virtio-snd),客户机会运行virtio声音驱动程序与vdev进行交互。此声音驱动程序由操作系统的本地音频服务加载;例如,对于QNX Neutrino客户机,io audio是音频服务。
- 为了相互通信,客户机驱动程序和vdev使用virtqueue,这是VirtIO设备上批量数据传输的标准机制
- 主机上的应用程序可以使用io audio的QNX音频服务来访问音频设备(例如扬声器)
要在QNX Hypervisor系统中支持共享音频,须向来宾和主机image 中添加组件,并在来宾的VM中配置virtio snd vdev。
主主机可以为每个客户机提供不同的音频功能,就像每个客户机在自己的单独板上运行一样。例如,一个客户机可能被允许捕获和输出音频,而另一位客户机只被允许输出音频。
要将主机中的音频功能呈现给任何特定的客户机,需要在承载客户机的VM中配置virtio snd vdev。vdev配置指定主机上哪些PCM流暴露给客户机,还指定了必须应用于访客的音频参数的任何限制,例如采样率、支持的格式以及最小和最大片段大小。