高通guestOS与hostOS通信框架HAB源码分析——概述

1)什么是HAB,他用来干什么?

如果你了解virtIO的话,就很容易明白HAB是用来干什么的。一句话来说,HAB实际作用和virtIO差不多。以高通8155(host qnx+guest安卓)为例,所有硬件外设驱动都在qnx端,那么安卓端要使用外设(比如触摸输入设备、摄像头设备等),就必须有一套host与guest通信的机制,可以使得qnx可以把数据共享给安卓。VirtIO和HAB都属于这种通信机制。举例说明,可以看到8155平台输入设备、块设备等走的virtIO机制,摄像头设备、硬编解码设备等走的HAB机制。

如下图所示,qnx,quest_shm@开头的都是HAB physical channel对应的共享内存设备树节点,qnx,quest_shm@xxx节点保存有共享内存的地址(即guestOS看到的物理地址,实际是hostOS的虚拟地址)和通信相关的中断向量信息(guestOS和hostOS通过中断通知对方共享内存上有数据处理)。

2)上面的设备树节点是如何被添加的?

Hypervisor进程将设备树+和guestOS加载到内存,然后vm_enry,触发上下文切换,cpu切换到guestOS运行,hyervisor在加载设备树的同时会动态将上述设备树节点添加到设备树。

3)HAB如何确认交互目标?

首先是不同服务的physical channel不同,比如摄像头服务有专门的physical channel,硬编解码服务也有专门的物理channel。不同的物理chanel用MMID标志。

#define MM_CAM_1        201//摄像头

#define MM_VID      501//硬编解码

其次是virtual channel,不同的vcID对应不同的业务。假设Front end(也即guestOS端)想start/stop控制back-end端的摄像头。那么他会在自己这段给自己分配一个vcid,然后再发起一个分配请求到back-end.back-end收到请求后,也会给自己分配一个vcid,这样俩端分别保存有自己的vcid和对端的vcid。相当于俩端建立了一个连接。

Vitual channel通道建立流程如下图:

最终本端的vcid会返回给用户层,后续用户都使用该vcid与对端通信。

用户层uhab.c重点接口:可以看到每个接口都有一个handle参数,他就是本端的vcid

int32_t habmm_socket_open(int32_t *handle, uint32_t mm_ip_id,

        uint32_t timeout, uint32_t flags)

int32_t habmm_socket_close(int32_t handle)

int32_t habmm_socket_send(int32_t handle, void *src_buff,

            uint32_t size_bytes, uint32_t flags)

int32_t habmm_socket_recv(int32_t handle, void *dst_buff, uint32_t *size_bytes,uint32_t timeout, uint32_t flags)

备注:用户空间的接口名都有一个socket,但实际与socket没什么关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二进制安装包安装Prometheus插件安装(mysql_exporter)

简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的,mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署,也可以通过容器形式部署,但为了数据收集的准确性,推荐二进制安装。 一,下载安…

代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III 打家劫舍 198.打家劫舍 文章讲解:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 题目链接:https://leetcode.cn/problems/house-robber…

[C#]使用onnxruntime部署yolov8-onnx实例分割模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

Android Framework | Linux 基础知识:入门指南

Android Framework | Linux 基础知识:入门指南 进行Android Framework开发需要具备基本的Linux基本知识,下面是一份Linux基础知识入门指南,希望对你有所帮助! 1. 简介 Linux 是一种免费、开源的操作系统,它是由芬兰…

文件高效复制与删除:轻松删除垃圾文件,让文件夹焕然一新!

你是否经常遇到文件复制繁琐、删除垃圾文件困难的问题?现在,我们为你提供了一款强大的文件高效复制与删除工具,让你轻松实现目标文件夹的整洁与高效! 第一步,我们要打开目标文件夹,就会发现里面有很多其他的…

SCPMA最新研究论文推荐!中国移动玻色量子发布联合研究成果

《中国科学:物理学 力学 天文学》英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA)出版中移(苏州)软件技术有限公司闻经纬和钱岭团队与北京玻色量子文凯团队的研究成果,文章题为“Optical experimental solution for the multiway numb…

Python练习之列表两数之和

列表两数之和 给定一个已按照非递减顺序排列的整数数组numbers,请你从数组中找出两个数满足相加之和等于target 函数应该以长度为2的整数数组的形式返回这两个数的下标值。numnbers的下标值从1开始&#xff0c;所以答案数组应当满足1<answer[0]<answer[0]<numbers.len…

Android--Jetpack--Paging详解

不尝世间醋与墨&#xff0c;怎知人间酸与苦。 择一业谋食养命&#xff0c;等一运扭转乾坤。 你见过哪些令你膛目结舌的代码技巧&#xff1f; 文章目录 不尝世间醋与墨&#xff0c;怎知人间酸与苦。择一业谋食养命&#xff0c;等一运扭转乾坤。你见过哪些令你膛目结舌的代码技…

mycat 安装和水平分表

1.拉取需要创建docker版的mycat资源 # 下载对应的资源 git clone https://github.com/ruanjiayu/docker.mycat # 进入docker.mycat cd /home/cluster/mycat/docker.mycat # 构建镜像 docker-compose build 2.修改配置 vim config/mycat/schema.xml <?xml version"…

three.js gltf后处理颜色异常(伽马校正)

效果&#xff1a; 应用了伽马校正&#xff0c;好像效果不明显 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"><…

各类好用的API推荐,赶紧收藏

快递物流订阅与推送&#xff08;含物流轨迹&#xff09;&#xff1a;【物流订阅与推送、H5物流轨迹、单号识别】支持单号的订阅与推送&#xff0c;订阅国内物流信息&#xff0c;当信息有变化时&#xff0c;推送到您的回调地址。地图轨迹支持在地图中展示包裹运输轨迹。包括顺丰…

考特殊教师证需要哪些条件

想要从事特殊教育工作&#xff0c;首先需要具备特殊教师证。那么&#xff0c;考取特殊教师证需要哪些条件呢&#xff1f;下面我将从几个方面为大家详细解答。 需要具备相应的学历背景。一般来说&#xff0c;申请特殊教师证需要具备本科及以上学历&#xff0c;且需要具备教育学、…

玩转朋友圈!这样运营朋友圈吸睛又吸金!

朋友圈已成为现代社交媒体中不可或缺的平台&#xff0c;并且有很大的潜力用于营销和推广。那么如何才能让朋友圈在众多用户中脱颖而出&#xff0c;吸引眼球并提升商业效益呢&#xff1f;主要从以下几点出发&#xff1a; 首先&#xff0c;要想吸引关注&#xff0c;您需要在朋友…

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

关闭MobaXterm等连接linux服务器的软件,依旧可以后台运行程序

linux screen 命令 &#xff08;1&#xff09;连接服务器&#xff0c;在服务器终端安装screen apt install screen &#xff08;2&#xff09;创建screen窗口&#xff0c;mm为窗口名。就可以在这里运行你的命令了 此时该窗口的状态变为 Attached screen -S mm &#xff08;3…

手把手教你,Selenium 遇见伪元素该如何处理?

Selenium 遇见伪元素该如何处理&#xff1f; 前言 问题发生 在很多前端页面中&#xff0c;大家会见到很多&#xff1a;:before、::after 元素&#xff0c;比如【百度流量研究院】&#xff1a; 比如【百度疫情大数据平台】&#xff1a; 以【百度疫情大数据平台】为例&#xff…

一文掌握文本语义分割:从朴素切分、Cross-Segment到阿里SeqModel

前言 之所以写本文&#xff0c;源于以下两点 在此文《基于LangChainLLM的本地知识库问答&#xff1a;从企业单文档问答到批量文档问答》的3.5节中&#xff0c;我们曾分析过langchain-chatchat项目中文本分割相关的代码&#xff0c;当时曾提到该项目中的文档语义分割模型为达摩…

MySQL日志管理 、备份与恢复

mysql日志管理 、备份与恢复 备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 而备份、恢复中&#xff0c;日志起到了很重要的作用 #######前言&#xff1a;日志⭐⭐ MySQL 的日志默认保存位置为 /usr/local/mysql/data ##配…

全面解析vcruntime140_1.dll无法继续执行代码问题

在使用电脑的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;如“找不到vcruntime140_1.dll无法继续执行代码”。vcruntime140_1.dll是Visual C Runtime Library&#xff08;视觉C运行时库&#xff09;的一个组件&#xff0c;主要用于支持应用程序的运行。这个文件包含了…

【AI】DETR模型可视化操作

Detr作为目标检测的算法&#xff0c;不同于之前算法的就是注意力机制&#xff0c;注意力机制能够直观看出来模型对图像关注的点&#xff0c;这个直观到底怎么直观呢&#xff0c;我们只听别人说肯定是不行的&#xff0c;上手测试才是最好的方式&#xff0c;像论文中插图那样的使…