Android hwcomposer服务启动流程

Android hwcomposer服务启动流程

  客户端          binder远程调用      服务端
surfaceflinger     --binder-->     hwcomposer 

在这里插入图片描述

.hal文件编译时生成支持binder进程间远程调用通信的cpp文件
在out/soong/.intermediates/hardware/interfaces/graphics/composer/2.1/
目录下找到对应的.h和.cpp文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

registerAsService()函数就是.hal编译成cpp文件时自动生成的方法,
用于注册成为服务
在out/soong/.intermediates/hardware/interfaces/graphics/composer/2.1
搜索registerAsService()能看到它的实现。

在这里插入图片描述

1)loadModule()流程

hw_get_mudule()找到模块id为hwcomposer的模块

在这里插入图片描述

HAL module 架构逻辑如下:

在这里插入图片描述
/hardware/libhardware/hardware.c
在这里插入图片描述
在这里插入图片描述
加载动态库:hwcomposer.xxx.so

https://xkzzz.com/post/55999.html  Linux动态库教程:深入理解符号表
dlopen函数用于打开指定的共享库文件
dlsym函数的功能就是可以从共享库(动态库)中
获取符号(全局变量与函数符号)地址

dlopen打开hwcomposer.xxx.so动态连接库
dlsym 在hwcomposer.xxx.so动态库中到HMI变量的地址,强制转换为指向hw_module_t的指针变量。

在这里插入图片描述

通过代码看android约定了:hal层数据结构。所以,大家按照这个约定编写代码。
Android方(甲方):通过dlsym找到类型为hw_module_t的HMI变量,
并通过HMI变量启动该模块工作。
设备生产制造方(乙方):在自己实现的hwcompoer动态库上,
实现类型为hw_module_t的HMI变量。
HAL module 架构
Android硬件抽象层有三个核心数据结构,
分别是hw_module_t , hw_module_methods_t, hw_device_thw_module_t 和 hw_device_t的区别是什么?
hw_module_t:是给动态库使用。
我的理解是用于代码之间的约定逻辑。
(代码间约定逻辑) (约定逻辑) (模块间session会话逻辑)
凡是用于代码之间的约定逻辑都可以成为module,
例如linux驱动开发中module_init和module_exithw_device_t: 该module的要实现具体功能对象。(业务逻辑)hw_module_methods_t:代码之间的接口 (模块间session会话通信接口)

高通平台:sm8150 hwcomposer动态库的代码,声明HMI变量,且HMI变量的类型必须为hw_module_t类型或hw_module_t类型的子类。
在这里插入图片描述

如果自定义一个module结构体,第一个成员变量类型必须为hw_module_t。
因为,结构体可以强制转为第一个成员变量的类型。
放在第一个位置,相当于继承了hw_module_t。

在这里插入图片描述

2)createHalWithAdapter()流程

通过loadModule()找到hwcompoer动态库的HMI变量,传给createHalWithAdapter()
最后,调用动态库里的HMI->methods->open()打开设备,
获取到hw_device_t类型设备变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.1)initWithDevice()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
initDispatch(): 初始化分发器。代码之间业务功能对接函数映射表。
由于在不同模块之间,不同公司实现的代码。所以就引入函数映射表。 (甲方提供接口声明,乙方实现接口功能)
mDispatch是一个struct类型的函数映射表。
Android方(甲方):需要create layer功能,也是声明了createLayer()接口 (代码间约定逻辑)(session会话接口)
设备生产制造方(乙方):按照session会话接口实现create layer功能,把实现create layer功能填充到mDispatch函数映射表中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
硬件抽象层模块中的自定义一个硬件设备结构体,并且第一个成员变量的类型必须为hw_device_t。
放在第一个位置,相当于继承了hw_device_t。
在这里插入图片描述
HWCSession继承hwc2_device_t,hwc2_device_t继承hw_device_t
也即:HWCSession的父类是hw_device_t
C++:封装,继承,多态
HWCSession子类转化为父类hw_device_t后,调用到的getFunction()函数就是子类 HWCSession::GetFunction()
在这里插入图片描述

3)createComposer()流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

测试用例设计方法:功能图

1 引言 前面几篇文章为我们讲述了因果图、判定表、正交试验等几种方法,主要是针对于不同条件输入输出的组合进行测试,但在实际需求中,我们也常会遇到需要对被测对象的状态流转进行验证的情况,此时前面几种方法将不再适用&#xf…

Windows本地的RabbitMQ服务怎么在Docker for Windows的容器中使用

1. 进入管理界面 windows安装过程请访问:Windows安装RabbitMQ、添加PHP的AMQP扩展 浏览器访问:http://127.0.0.1:15672/ 2. 创建虚拟主机 上面访问的是 RabbitMQ 的管理界面,可以在这个界面上进行一些操作,比如创建虚拟主机、…

CSS彩色发光液体玻璃

效果展示 CSS 知识点 animation 综合运用animation-delay 综合运用filter 的 hue-rotate 属性运用 页面整体布局 <section><div class"glass" style"--i: 1"><div class"inner"><div class"liquid"></d…

LeetCode---374周赛

题目列表 2951. 找出峰值 2952. 需要添加的硬币的最小数量 2953. 统计完全子字符串 2954. 统计感冒序列的数目 一、找到峰值 这个简单的模拟&#xff0c;代码如下 class Solution { public:vector<int> findPeaks(vector<int>& mountain) {int nmountain…

Springboot整合阿里云短信服务

目录 1.注册登录用户 2.点击AccessKey管理&#xff0c;开通使用子用户AccessKey 2.1点击进入AccessKey管理 2.2点击用户创建用户 2.3选择控制台创建 2.4权限修改 3.短信服务 4.创建Springboot项目使用SDK 4.1创建一个springboot项目 4.2导入阿里云短信Maven依赖 4.3…

N体问题-MATLAB 中的数值模拟

一、说明 万有引力是宇宙普适真理&#xff0c;当计算两个物体的引力、质量、距离的关系是经典万有引力物理定律&#xff0c;然而面向复杂问题&#xff0c;比如出现三个以上物体的相互作用&#xff0c;随时间的运动力学&#xff0c;这种数学模型将是更高级的思维方法。本文将阐述…

gin使用自签名SSL证书与自签名证书不受信任方法解决

文章目录 1. X.509 V3证书介绍2、使用openssl生成自签名证书和解决不受信任问题2.1、生成根证书2.2、为域名生成证书申请文件2.3、为域名创建证书的扩展描述文件2.4、为域名创建证书 3、Go应用中使用自签名证书3.1、gin框架调用实现3.2、运行效果 4、使用java的bouncycastle生成…

比较好的python书籍,python有什么书推荐

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;比较好的python书籍&#xff0c;python有什么书推荐&#xff0c;现在让我们一起来看看吧&#xff01; 我是在半年前接触到Python的&#xff0c;我之前没有一点编程基础&#xff0c;但在我自学的这半年里&#xff0c;我发…

Saas 中 用默认的值,不初始化给商户值,sql 查询 group by中,指定字段 倒序

在saas 项目中&#xff0c;有些商户没有设定某些值&#xff0c;则用系统默认的值&#xff0c;不需要初始化给商户 SELECT * FROM app_public_config WHERE (name, merchant_id) IN (SELECT name, MAX(merchant_id)FROM app_public_configGROUP BY name ) and merchant_id IN …

vue3 后台返回的接口数据,下载图片到本地

vue3 后台返回的接口数据&#xff0c;下载图片到本地 <el-table><el-table-column align"left" label"操作" min-width"240"><template #default"scope"><el-button icon"edit" type"primary&quo…

我的NPI项目之Android 安全系列 -- Android Strongbox 初识

从Android9(Pie)开始,Google强烈建议支持Strongbox. 具体描述如下: 一直到目前的Android14. 对应的内容也一并贴出来: 说人话就是Android开始通过独立于主SoC的单元进行密钥存储了。 通常&#xff0c;这样的单元就是我们通常称作的Secure Element&#xff08;SE&#xff09;&am…

高效备份与大数据分析:揭秘亚马逊云科技海外服务器强大能力

首先&#xff0c;让我们先来了解一下云计算的基本概念。云计算是一种基于互联网的计算模式&#xff0c;通过将计算资源、存储空间和应用程序提供给用户&#xff0c;实现按需使用和付费的方式。依托于众多出彩的海外服务器产品我们可以获得这一体验。云计算能够极大地简化用户的…

OpenCV-Python:DevCloud CodeLab介绍及学习

1.Opencv-Python演示环境 windows10 X64 企业版系统python 3.6.5 X64OpenCV-Python 3.4.2.16本地PyCharm IDE线上注册intel账号&#xff0c;使用DevCloud CodeLab 平台 2.DevCloud CodeLab是什么&#xff1f; DevCloud是一个基于云端的开发平台&#xff0c;提供了强大的计算…

UE5 C++(二)— 游戏架构介绍

架构关系如下&#xff1a; 这里只简单描述下&#xff0c;具体的查看官方文档 AGameMode: AGameMode 是 AGameModeBase 的子类&#xff0c;拥有一些额外的功能支持多人游戏和旧行为。 所有新建项目默认使用 AGameModeBase。 如果需要此额外行为&#xff0c;可切换到从 AGameM…

二、Java基础语法

day02 - Java基础语法 1. 注释 ​ 注释是对代码的解释和说明文字。 Java中的注释分为三种&#xff1a; 单行注释&#xff1a; // 这是单行注释文字多行注释&#xff1a; /* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */ 注意&#xff1a;多行注释不能嵌套使用…

docker-harbor 私有仓库

docker 镜像 容器 仓库 仓库&#xff1a;保存镜像 私有&#xff0c;自定义用户的形式登录仓库&#xff0c;拉取或者上传镜像。&#xff08;内部隔离的用户&#xff09; harbor&#xff1a;是VMware公司开发的&#xff0c;开源的企业级的docker registry项目。 帮助用户快速…

【刷题笔记】N皇后||回溯||符合思维方式

N皇后II 1 题目详情 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 https://leetcode.cn/problems/n-queens-ii/ 2 分析 刚一开始的时候我认…

由@EnableWebMvc注解引发的Jackson解析异常

同事合了代码到开发分支&#xff0c;并没有涉及到改动的类却报错。错误信息如下&#xff1a; Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.conv…

【Python机器学习系列】一文讲透机器学习中的K折交叉验证(源码)

一、简介 前面我详细介绍了关于机器学习的归一化和反归一化以及表格数据在机器学习中的输入格式问题&#xff1a; 一文彻底搞懂机器学习中的归一化与反归一化问题 【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式&#xff08;理论源码&#xff09; 本文将介绍…

Mysql workbench

下载地址: https://download.csdn.net/download/a876106354/88616595