高通Q+A Virtio hypervisor touch框架介绍(share-device)

背景

大家都知道现在高通芯片在汽车行业的座舱域运用比较热门,但是这种现象不是突然冒出来的,高通最早在2015年左右就开始推广他们的第一代座舱芯片820A。而在2018年左右开始推广他们的第二代产品(6155/8155/8195),在2021年左右,高通开始推广他们第三代座舱芯片8295.不过有意思的是高通自己对8155这一代产品的定义是GEN3,而8295则是GEN4(或许在820之前还有一代产品?).

这些几代产品虽然是不同代的座舱芯片,但是在很多技术和架构上却是一脉相承的,比如今天我们提到的virtio-touch技术。virtio是一种开源的半虚拟化的技术,目前广泛的运用于云主机的virtio-net/virtio-blk等模块上.感兴趣的朋友可以自行搜索virtio相关的资料.

在开始前需要声明的是,由于当前介绍的框架是基于高通平台,所以本文名为“高通Q+A hypervisor touch框架介绍”,但是实际上这个框架的实际应用涉及到好几个角色:QNX,高通,Linux Android,每个角色都很重要,这里介绍的信息具备通用性,意味着同样框架可能应用在其他平台上.

Virtio Hypervisor touch框架

高通Q+A Virtio hypervisor touch框架介绍(share-device)_第1张图片

Touch 数据传输大致过程

  1. 手指触摸TP产生中断,触发QNX上的touch driver的中断处理函数
  2. touch driver读取tp芯片上报的坐标数据,并且解析出touch类型,坐标
  3. touch事件上报到mtouch框架(display2)
  4. screen框架下的display2 屏幕接收到touch事件
  5. vdev-virtio-input.so从screen框架中的display2处获取到touch事件
  6. vdev-virtio-input.so通过virtio虚拟化框架将touch数据透传到la端的virtio-input驱动
  7. virtio-input获取touch事件数据接入linux的input子系统

Virtio Hypervisor touch 配置

QNX mtouch配置

qnx的touch驱动一般由mtouch带起,mtouch启动时需要指定对应的配置参数文件.例如:

 配置文件中的内容

 这个配置文件中的内容有点类似于linux的dts配置,需要告诉mtouch,你的touch驱动的一些基本信息.

qvm配置

以下是一个配置示例:

vdev vdev-virtio-input.so
loc 0x1c3a0000
intr gic:46
size 1920,720
screen multi-touch
protocol b
window window_1

关于这些配置里面的含义可以参考QNX文档:,或者在QNX使用命令:use  vdev-virtio-input.so 了解详细的用法.

Android kernel配置

virtio input依赖于input子系统以及virtio子系统,所以需要做相应的kenrel config配置,具体来说可以参考下面的Kconfig信息


config VIRTIO_INPUT
    tristate "Virtio input driver"
    depends on VIRTIO
    depends on INPUT
    ---help---
     This driver supports virtio input devices such as
     keyboards, mice and tablets.
 
     If unsure, say M.

需要注意的是,virtio_input中的配置并不在dts文件中,而是在qvm启动android虚拟机的时候,动态修改加入到dtb数据中。

你可能感兴趣的:(高通hypervisor,touch全解析,物联网,linux)