hal开发之hidl/aidl支持的绑定式直通式详细讲解

news2025/7/11 2:25:00

为啥有hidl呢?

这个问题其实网络上答案比较多,属于android想要让厂商快速升级解耦制定的,即把原来系统framework和厂商耦合的hal在同一个个system.img进行剥离开,把厂商相关的放到vendor.img,aosp系统公共部分framework相关的放到system.img.
官方解释:
Android O的一项新元素是 Project Treble。这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。
在Android O之前,HAL是一个个的.so库,通过dlopen来进行打开,库和framework位于同一个进程。
新的架构之下,framework和hal运行于不同的进程,所有的HAL采用新的HIDL技术来完成。作为此变化的一部分,运行 Android 8.0 的设备必须支持绑定式或直通式 HAL:

绑定式 HAL
以 HAL 接口定义语言 (HIDL) 表示的 HAL。这些 HAL 取代了早期 Android 版本中使用的传统 HAL 和旧版 HAL。在绑定式 HAL 中,Android 框架和 HAL 之间通过 Binder 进程间通信 (IPC) 调用进行通信。所有在推出时即搭载了 Android 8.0 或后续版本的设备都必须只支持绑定式 HAL。

直通式 HAL
以 HIDL 封装的传统 HAL 或旧版 HAL。这些 HAL 封装了现有的 HAL,可在绑定模式和
Same-Process(直通)模式下使用。升级到 Android 8.0 的设备可以使用直通式 HAL。

一看就知道绑定式HAL是主推方法了,后面的HAL也将用绑定式HAL方式编写。

在这里插入图片描述

第一种就没啥可以分析的,在8.0以前都是这种方式,即直接应用进程包含一个hw的so,针对以上的其他几个情况分析:

情况2直通式:

在这里插入图片描述

这里其实采用就是直通式,目前系统中使用这种方式的较少,最经典就是android.hardware.graphics.mapper@2.0::IMapper/default这个库还是采用这种直通式。
什么是直通式?
最重要区分直通式域绑定式在于调用端客户进程是否和服务端提供hal功能实现的,是否在一个进程执行。
这里也是使用了hidl,但是明显这个地方他只是做了一下接口包装,所有hal的执行依然在客户端进程。

情况3绑定式(服务端包装维护hal库)

这种方式就是采用是绑定式,这样对system的应用或者框架,就可以通过hidl或aidl接口来通讯,但是绑定服务的具体实现其实还是调用了以前的老hal so方式来实现服务的。
在这里插入图片描述

这种方式实现的代表就有audio部分 android.hardware.audio@6.0::IDevicesFactory/default,
他的实现方式就是有一个单独的服务android.hardware.audio.service:

audioserver    968     1   49636  17696 0                   0 S android.hardware.audio.service

这个服务与audioserver这种客户端进行跨进程通讯,audioserver就通过hidl相关接口调用到android.hardware.audio.service,android.hardware.audio.service具体实现是调用的原来的hal那一套hw库,相当于所有相关的业务其实还在老款的hal库里面

情况4绑定式

这个和上面其实绑定式理解没啥区别,只是在服务端实现有区别,这种实现是直接自己服务端实现hal,而上面实现却是调用了老版本的hal库,这种方式要求新加入的hal库都是这种实现方式,完全所有的实现在服务端进程里面,即不需要在额外包裹hw库方式,厂商编译时候可以考虑直接提供相关的可执行文件既可以
如下图就是直接提供了相关的hal的可执行文件:
在这里插入图片描述这里就直接提供了相关指纹的bin文件进行集成

在这里插入图片描述
更多framework干货课程优惠获取相关可以+V(androidframework007)
视频:https://www.bilibili.com/video/BV1ah411d7Y3
在这里插入图片描述

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

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

相关文章

ros_rtsp订阅Image类型topic转换为rtsp视频流

文章目录 一、安装环境二、在catkin工作空间中构建三、设置流四、推出视频流五、验证视频流1、安装vlc拉流2、安装gstreamer拉流3、安装FFmpeg拉流 一、安装环境 ROS gstreamer development libs,包括base、good、bad和rtspserver: sudo apt-get install libgstre…

成功实施自动化测试的优点

目录 什么是自动化测试? 自动化测试的好处 测试执行7*24 回归测试 可重用性 节省您很多时间 降低成本更好地利用人力 左移测试做得更好! 解放手动测试 最大化测试覆盖率 监控服务 复杂而冗长的测试方案 结论 随着技术的发展,保证…

国产FiRa认证低功耗UWB系统级SoC精准定位方案芯片

目录 什么是"UWB技术"国产UWB方案芯片特性国产低功耗UWB SoC芯片特性 随着物联网、无线通信等技术的不断发展,UWB作为一种超宽带通信技术,逐渐在精准定位、智能家居、汽车电子、智能制造等领域崭露头角。 什么是"UWB技术" UWB&…

Python接口自动化测试之Requests库Pytest框架

发送get请求 #导包 import requests #定义一个url url "http://xxxxxxx" #传递参数 payload"{\"head\":{\"accessToken\":\"\",\"lastnotice\":0,\"msgid\":\"\"},\"body\":{\"…

C#简单晶圆wafermapping显示示范demo

点击,双击可改变颜色 预设5行8列数据: using (fratte.at.WafermapDisplay.Form1 form_show new fratte.at.WafermapDisplay.Form1()){int[,] data_demo new int[,]{{ 0,0,0,1,0 },{ 0,5,1,0,0 },{ 1,7,6,2,3 },{ 1,0,1,2,3 },{ 0,2,0,2,3 }, { 1,5,6,…

SpringCloud: feign整合sentinel实现降级

一、加依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

软件测试用例设计方法-因果图法

边界值法是等价类划分法的补充&#xff0c;所以&#xff0c;它们是一对搭档。 那么&#xff0c;判定表法有没有它的搭档呢&#xff1f; 答案是&#xff0c;有的。那就是本篇文章分享的用例设计方法—— 因果图法 。 定义 因果图法&#xff1a; 用来处理等价类划分和边界值考…

基于YOLOv8模型的老虎目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的老虎目标检测系统可用于日常生活中检测与定位老虎目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

postgresql中uuid的使用

1.安装扩展插件 create extension "pgcrypto"; 2.查询uuid #36位uuid select gen_random_uuid();#去除斜杠 select REPLACE(gen_random_uuid()::text, -, ) 3.uuid在字段默认值上的使用 注:在函数前,需要加上模式名称

6.SNMP报错-Error opening specified endpoint “udp6:[::1]:161“处理

启动SNMP服务 /etc/init.d/snmpd start 出现以下报错信息 [....] Starting snmpd (via systemctl): snmpd.serviceJob for snmpd.service failed because the control process exited with error code. See "systemctl status snmpd.service" and "journalctl…

树控件的使用

目录 1、修改树控件的基础属性&#xff1a; 2、准备图标 &#xff1a; &#xff08;1&#xff09;、ico后缀的图片放入当前文件路径的rc中 &#xff08;2&#xff09;、在Icon中添加资源&#xff0c;导入图片 &#xff08;3&#xff09;、准备HICON图标 &#xff08;4&am…

牛客:FZ113 牛群的配对

FZ113 牛群的配对 文章目录 FZ113 牛群的配对题目描述题解思路题解代码 题目描述 题解思路 倒序遍历字符串&#xff0c;若当前字符是d且前一个字符是c&#xff0c;或者当前字符是b且前一个字符是a则在字符串中消除这两个字符&#xff0c;直到字符串便遍历完毕&#xff0c;若字…

prometheus获取kubelet接口监控数据

一、前言 k8s集群的kubelet服务内部有自带的cadvisor服务用于收集k8s集群的监控数据&#xff0c;所以可以通过调用kubelet的接口就能获取pod的资源监控数据&#xff0c;在新版本的k8s中&#xff0c;kubelet的监控数据获取端口为10250端口&#xff0c;老版本的是10255端口 二、…

web前端基础训练-----创建用户反馈表单

1&#xff0c;实验代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>用户反馈表单</title></head><body><form><fieldset><h1>用户反馈</h1><hr/><h4>亲爱的用…

tortoise 快捷操作分支合并

请大佬来看看有没有问题&#xff1f;&#xff0c;补充一下 1.创建新分支&#xff1a;bbb 2.在分支中修改我需要的功能 3.提交&#xff0c;本地代码&#xff0c;分支可推送&#xff0c;也可不推送到远端 4. 切换到需要合并的目标分支master&#xff0c;然后点击分支合并&#x…

Java并发面试题:(四)synchronized和lock区别

synchronized 关键字 synchronized关键字解决的是多个线程之间访问资源的同步性&#xff0c;synchronized关键字可以保证被它 修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外&#xff0c;在 Java 早期版本中&#xff0c; synchronized属于重量级锁&#xff0c;效率…

“Web 3.0引领未来:下一代互联网技术将来袭!“

"下一代互联网技术&#xff0c;称为Web 3.0或Web3&#xff0c;主要利用机器学习、人工智能&#xff08;AI&#xff09;和区块链技术。" 与 Web2 相比&#xff0c;Web3 为消费者提供了对其在线数据的更多自主权&#xff0c;而Web2 专注于托管在”集中式“网站上的用户…

rv1126-rv1109-yaffs2-mkyaffs2image610

今天使用了一下yaffs2功能 就是生成一个yaffs的包 从移植的角度先生成ro_1109.yaffs包 烧录进去 操作步骤&#xff1a; 创建和生成ro文件夹和 mkyaffs2image610可执行程序 然后用 fakeroot ./mkyaffs2image610 ro ro_1109.yaffs 1 2生成了ro_1109.yaffs 例&#xff1a; …

无人机航拍图像拼接与目标识别

一、简介 无人机用来做图像侦察是常见功能&#xff0c;现有技术基本是无人机对某片区域进行飞行&#xff0c;人工实时监控飞行图像&#xff0c;将图像录制成视频供事后回放。此方法对人员业务要求比较高、反应速度足够快、不利于信息收集、录制视频丢失空间信息、对于后期开展区…

Ubuntu20网络总是连接失败,查看ip只有ipv6,没有ipv4

对于连接失败。 将网络适配器改成桥接模式。 原先使用的 NAT模式导致连接失败。 对于只有ipv6没有ipv4 是因为没有勾选桥接模式的物理状态。 当然可能还有其他原因&#xff0c;其他的就只能百度了。 继续点击网络适配器。 勾选复制物理网络连接状态。