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

一文讲解Linux虚拟化KVM-Qemu分析之virtio初探 从本文开始将研究一下virtio;本文会从一个网卡虚拟化的例子来引入virtio,并从大体架构上进行介绍,有个宏观的认识;细节的阐述后续的文章再跟进;Linux内核源码技术学习路线+视频教程内核源码Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈。 阅读详情
AI摘要

文章介绍了高通在汽车行业的座舱域芯片应用,特别是Virtio-Touch技术在QNX、高通、LinuxAndroid之间的交互。触控数据传输过程涉及中断处理、坐标解析和虚拟化框架,同时提到了QNXmtouch配置、QVM配置及Androidkernel配置的相关细节。

背景

大家都知道现在高通芯片在汽车行业的座舱域运用比较热门,但是这种现象不是突然冒出来的,高通最早在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 数据传输大致过程

  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数据中。

05-SA8155 QNX Hypervisor MultiTouch多点触摸 Hypervisor多点触摸涉及多个系统多个显示子系统。多系统:QNX + Android + Linux多显示子系统:驾驶屏 + 副驾驶 + 控制屏 + 后座屏 + 其他.....可以用不同技术方案实现。 阅读详情

相关推荐

05-SA8155 QNX Hypervisor 之 Virtio-i2c虚拟I2C

virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率。在完全虚拟化的解决方案中,guest VM 要使用底层 host 资源,需要 Hypervisor 来截获所有的请求指令,然后模拟出这些指令的行为,这样势必会带来很多性能上的开销。

静虚待令,有物混成 1万+

Hypervisor touch架构-passthrough介绍

Hypervisor touch Passthrough解决方案在另外一篇文章中,我们已经介绍了Hypervisor touch架构中的一种(),这篇文章会介绍另外一种Hypervisor touch方案.Hypervisor touch Passthrough解决方案。

kill150的专栏 2156

01-SA8155 QNX 虚拟机Hypervisor

Hypervisor运行在Host OS操作系统上,其他操作系统均在Hypervisor上运行。:Hypervisor直接运行在硬件上,操作系统在Hypervisor之上运行。终止(关闭):echo control 0 dev/vmm。路径:qnx_ap/AMSS/platform/vm/resources/关闭/终止 qvm(GVM):slay -s SIGQUIT qvm。", //host PVM --- 主机。不直接操作/dev/vmm 实现关闭,启动vm。

静虚待令,有物混成 1万+

QNX 触摸Mtouch调试

因为芯驰平台QNX运行在AP2域,而屏幕全部挂载MP域,相当于屏幕的初始化已经在MP域做完,我们只需要接收MP域过来的remsg的信息,将rgmsg信息做解析,然后注册进mtouch即可。这里有几个参数,宽高为2560,高度为1440,最大的触摸点数支持两指,touch_id是从0开始的,rcpu_id这个不是QNX原生的配置,和芯驰平台有关,我们不需要关心。这里指的是触摸的display id 是2 ,和平台有关,在此项目上display2指的是中控。

Benjenson的博客 1566

QNX平台模拟屏幕点击事件

前言 QNX系统下界面是以screen为单位,纵向分层显示。工作中遇到screenA的touch事件被screenB截获,导致screenA监测release事件一直未释放而无响应的问题。考虑在出现问题的时候,模拟屏幕点击release事件,可激活screenA重新接收新的touch事件。 1、初始化 1.1 上下文 screen_context_t screen_context = 0; screen_create_context(&screen_context,SCREEN_APPLICATIO

yelo_go的博客 2341

[实践篇]13.28 QNX下的mtouch服务

该参数用于指定 mtouch 资源管理器(驱动程序)的配置文件的位置。如果未指定 -c 选项,mtouch 将使用 /etc/system/config/mtouch.conf 作为默认值。

从0到1,突破自己 1783

高通hypervisor display框架解析

下面这张图是高通文档上能看到的对于高通hypervisor的display显示框架,但是关于QNX和LA侧是如何交互的,好像没有找到相关的文档介绍。正好最近遇到了一些和display相关的问题,趁着这个档口稍微研究了下QNX和LA侧两边是怎么交互的。

kill150的专栏 7871

QNX侧触摸屏面板线程函数tp_recv_thread源码分析

在上面的代码中,tp_recv_thread函数首先打开触摸屏设备文件,并使用mmap_device_io函数将触摸屏设备的寄存器地址映射到用户空间。总结起来,QNX侧触摸屏面板线程函数tp_recv_thread负责接收来自触摸屏设备的输入数据,并进行相应的处理。在主函数中,通过pthread_create函数创建一个线程,并传入tp_recv_thread函数作为线程函数。触摸屏面板线程函数tp_recv_thread负责接收来自触摸屏设备的输入数据,并进行相应的处理。

SUYUMM的博客 266

【触摸按键识别】触摸验证(五)

我们需要的函数很简单,只有2个 1、bool MTOUCH_Service_Mainloop(void),运行主函数 2、bool MTOUCH_Button_isPressed(enum mtouch_button_names name) 获取触摸状态函数 主函数设计如下: 注意:最上面的2个箭头的中断必须打开。之后就是调用主函数,调用触摸状态,2个中文注...

搜索微信公众号(airX嵌入式)获取更多知识 2008

【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析

【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析

|~~~热爱生活、努力学习的小伙汁~~~| 1169

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2886

android virtio-input驱动加载过程分析

看到这里就清晰了virtio_input_driver_init函数定义,他是由virtio_input_driver + _init构成的. 最终由内核的module_init宏定义注册到内核中. 在内核调用do_one_initcall挨个调用对应的init函数时,最终会调用到上面宏定义中的__register函数,这个函数其实就是register_virtio_driver(module_driver宏定义中第二个宏参数).在virtio-input驱动中,通过id_table去匹配驱动和设备.

kill150的专栏 2553

【前端HTML生成条形码——MQ】

本文将展示前端HTML如何根据用户输入内容生成对应的条形码,附HTML和JS代码。代码如下(示例):

weixin_42588676的博客 1955

QNX SCREEN架构基本介绍

QNX SCREEN架构

kill150的专栏 4950

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7833

Js逆向抖音a_bogus --/* V 1.0.1.19-fix.01 */补环境

需要在addEventListener中补一个鼠标移动事件,不补这个环境,生成的值是假值,你拿去请求,响应200,但是没有数据,这个算是dy的最难发现的一个难点。dy这个,没有原形链检测,我只是习惯了这样补,对XMLHttpRequest进行重写,导出a_bogus.发现可以响应状态码200,而且可以获取数据,接着注释params中的a_bogus。在n.apply的下面插入上述代码,对a_bogus进行全局导出。如果没有,就多放几次断点,因为每个人的游览器不一样。必须触发至少一次鼠标事件,不触发不给过。

2302_76420666的博客 4201

[SA8155] 探索QNX Hypervisor如何管理Android系统的AB分区(一)

在启动Android虚拟机的时候,QNX中的VMM模块会获取两个系统的slot状态,然后根据Android的ab分区状态,传入启动所需的配置文件。Host QNX的slot状态是通过高通系统接口获取的;而Guest Android的slot状态是通过解析Android的misc分区获取的。回到关于如何保证两个不同系统ab分区一致的问题,我们可以基于本文分析出的相关信息,做进一步的探索。

Michel Embarqué 5508

自适应IIR格型滤波器的Matlab实现

概述 在现有的众多抑制窄带干扰的信号处理手段中,时域自适应陷波干扰抑制技术具有实现简单、抗干扰性能好等优点。IIR陷波器按照结构可以分为直接型和格型两种。相比自适应直接型IIR陷波器,自适应格型IIR陷波器不仅可以准确地控制滤波器的陷波频率,也可以准确地调整陷波器的带宽。 传递函数 二阶自适应IIR格型陷波器的传递函数H(z)为: 其中α与陷波带宽有关,β与陷波频率有关;对应的结构如下图所示: Matlab算法实现 ...

剑藏锋的博客 2799

virtio-input(share-device)数据流向

这里面涉及到几个模块:virtio-input:virtio-input触摸驱动virtio-mmio: virtio memory map I/O, 负责host-guest之间的内存映射virtio-ring: ring buffer,负责virtio的buffer管理。

kill150的专栏 2014

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 498

OpenClaw与大语言模型(Claude/GPT/MiniMax)的集成架构与最优配置策略

摘要 本文探讨了OpenClaw框架与大语言模型(Claude/GPT/MiniMax)的集成架构与优化策略。大语言模型具有强大的自然语言处理能力,但集成面临API成本、响应延迟、上下文管理等挑战。OpenClaw采用分层架构设计,包括用户界面层、对话管理层、提示工程层、模型适配层和API调用层,支持多模型切换、智能对话管理和成本控制。系统通过模型适配层实现不同API的统一调用,并提供缓存、监控等优化机制。该集成方案能够充分发挥大语言模型的优势,为本地AI助理提供更智能的服务。

一键难忘的博客 1693

QNX-从4到6简单入门

第一部分: QNX系统的安装与使用 1.QNX的微内核,甚至不包括进程管理,仅提供进程间的通信(Software Bus)。但在实际编译的系统中,仍然是进程调度、同步、进程间通信等编译在同一个可执行文件中的,它就是/boot/sys/procnto (QNX6).  2.QNX 4.x仅支持x86,QNX 6.x可支持PowerPC等  3.QNX 4.x只有Process,没有Thre

CyberLabs的专栏 8783
上一篇: 高通8155 boot分析
下一篇: 高通Q+A平台 android gcore解析环境搭建
norlan_jame
博客等级 码龄16年 4567粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值