背景
大家都知道现在高通芯片在汽车行业的座舱域运用比较热门,但是这种现象不是突然冒出来的,高通最早在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框架
Touch 数据传输大致过程
- 手指触摸TP产生中断,触发QNX上的touch driver的中断处理函数
- touch driver读取tp芯片上报的坐标数据,并且解析出touch类型,坐标
- touch事件上报到mtouch框架(display2)
- screen框架下的display2 屏幕接收到touch事件
- vdev-virtio-input.so从screen框架中的display2处获取到touch事件
- vdev-virtio-input.so通过virtio虚拟化框架将touch数据透传到la端的virtio-input驱动
- 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数据中。