首页 > 其他分享 >谷歌为什么要用AIDL替代HIDL(HAL)?

谷歌为什么要用AIDL替代HIDL(HAL)?

时间:2024-07-22 16:07:06浏览次数:14  
标签:HAL AIDL HIDL 接口 使用 Android

背景:

官方:https://source.android.com/devices/architecture/aidl/aidl-hals.

Google 在Android 11引入了AIDL for HALs,旨在代替HIDL原先的作用。在之后的Android版本推荐使用AIDL 实现Hal层的访问。
这样做的原因,应该有以下几点:

  1. AIDL比HIDL存在的时间更长(仅从Android 8到Android 10),并在许多其他地方使用,如Android框架组件之间或应用程序中。既然AIDL具有稳定性支持,就可以用单一的IPC方式从HAL到框架进程或者应用进程。
  2. AIDL还有一个比HIDL更好的版本控制系统。

再详细的展开说就是:

  1. AIDL 更成熟,使用更广泛,如果HAL层也使用了AIDL的方式,那么就可以直接从应用进程调用到HAL 进程,以前使用HIDL的时候实现应用进程访问HAL的服务,需要在system server进程的中介。来个图:

     

  2. 以前使用HIDL的方式,如果后续vendor HAL version需要迭代升级,那么就需要再创建一个子目录,过程中实际上做很多的重复工作,冗余而效率不高。

值得注意的是:在HAL 层使用AIDL必须使用Stable AIDL, 和我们在应用层或者框架层稍微不同,因为和vendor的接口设计要兼顾稳定性,system和vendor的更新速率不一样。

HALs using AIDL to communicate between framework components must use Stable AIDL.

AIDL for HALs实战

https://blog.csdn.net/qq_40731414/article/details/126823262


适用于 HAL 的 AIDL

Android 11 中引入了在 Android 中使用 AIDL 实现 HAL 的功能。这样就能在不使用 HIDL 的情况下实现 Android 的部分代码。在可能的情况下,应将 HAL 转换为仅使用 AIDL(当上行 HAL 使用 HIDL 时,必须使用 HIDL)。

如果 HAL 使用 AIDL 在框架组件(例如 system.img 中的组件)和硬件组件(例如 vendor.img 中的组件)之间进行通信,必须使用稳定的 AIDL。不过,如需在分区内进行通信(例如从一个 HAL 到另一个 HAL),则对需要使用的 IPC 机制没有任何限制。

设计初衷

AIDL 出现在 HIDL 之前,而且在 Android 框架组件之间或应用内等其他很多地方都有使用。现在,由于 AIDL 具备了稳定性支持,所以能够仅使用一个 IPC 运行时环境来实现整个堆栈。此外,AIDL 的版本控制系统也优于 HIDL。

  • 因为仅使用一种 IPC 语言,所以意味着只需了解、调试、优化和保护一个运行时环境。
  • AIDL 可为接口所有者提供内建的版本控制机制。
    • 所有者可以将方法添加到 Parcelable 的接口或字段的末尾。这意味着可以在持续多年的开发过程中简化对代码的版本控制,并逐年降低产生的开销(可以就地修改类型,而且更新接口版本不需要新增额外的库)。
    • 扩展接口可以在运行时附加,而不是在类型系统中附加,因此无需将下游扩展 rebase 到新版接口上。
  • 如果现有 AIDL 接口的所有者选择使其稳定化,此类接口可以直接沿用。而在以前,这种情况下必须用 HIDL 创建接口的完整副本。

 

AIDL 与 HIDL 之间的主要差异

使用 AIDL HAL 或使用 AIDL HAL 接口时,请注意与编写 HIDL HAL 的差异。

  • AIDL 语言的语法更接近 Java。HIDL 语言的语法类似于 C++。
  • 所有 AIDL 接口都具有内置的错误状态。请勿创建自定义状态类型,而应在接口文件中创建常量状态 int,并在 CPP/NDK 后端使用 EX_SERVICE_SPECIFIC,在 Java 后端使用 ServiceSpecificException。详见错误处理
  • 发送 binder 对象时,AIDL 不会自动启动线程池。您需要手动启动线程池(详见线程管理)。
  • 未经检查的传输错误不会导致 AIDL 终止运行(但是未经检查的错误会导致 HIDL Return 终止运行)。
  • AIDL 只能为每个文件声明一种类型。
  • AIDL 参数除了可以被指定为 output 参数,还可以被指定为 in/out/inout 参数(没有“同步回调”)。
  • AIDL 将 fd 用作基元类型,而不是句柄。
  • HIDL 对不兼容的更改使用主要版本,对兼容的更改使用次要版本。而在 AIDL 中,更改实现了向后兼容。AIDL 没有明确的主要版本概念,而是将版本更改体现在软件包名称中。例如,AIDL 可能会使用软件包名称 bluetooth2
  • 默认情况下,AIDL 不会继承实时优先级。必须根据 binder 使用 setInheritRt 函数才能启用实时优先级继承。

 

refs:

https://blog.csdn.net/qq_40731414/article/details/126823262

https://source.android.com/docs/core/architecture/aidl/aidl-hals?hl=zh-cn

https://source.android.com/docs/core/architecture/hidl?hl=zh-cn

https://source.android.com/docs/core/architecture/aidl/stable-aidl?hl=zh-cn

https://source.android.com/docs/core/architecture/aidl/aidl-backends?hl=zh-cn

 

标签:HAL,AIDL,HIDL,接口,使用,Android
From: https://www.cnblogs.com/bluestorm/p/18316225

相关文章

  • Halcon的Blob分析
    一、Blob分析流程及常用算子1.基本步骤Blob分析的基本步骤,这是一种理想状态,也是最基本的套路,获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)。halcon代码实现如下:read_image(Image,‘particle’)threshold(Image,BrightPixels,120,255)//阈......
  • 失败笔记本--HALCON--009--202407
    失败笔记本-HALCON篇-009项目场景:今天还是和大佬学习的一天,今儿个学习怎么识别图中的颜色块,实现下面的效果:识别到图中的颜色块的颜色,并显示在图中。参考大神的链接:halcon入门教程10_颜色识别11.通过颜色灰度识别图中的颜色步骤:上来我就是一套丝滑小连招啊,打开图片,......
  • Datawhale AI夏令营学习笔记 (3)
        在上一篇DatawhaleAI夏令营学习笔记(2)-CSDN博客中我们尝试使用了机器学习的方法进行回归预测。本篇,我们分为两个方面来探索。一方面,我们将继续使用机器学习的方法,在原有的数据上做更多特征工程,在预测上我们使用更多的算法模型。另一方面,我们尝试使用深度学习的方......
  • Datawhale AI 夏令营:从零入门CV图像竞赛(Deepfake攻防)----Task 2
    Task2:从baseline入门深度学习原任务地址:https://datawhaler.feishu.cn/wiki/CsS2weZvgigEKok6IzycdiVunuy任务目标是:开发一个基于深度学习的Deepfake检测模型。这个实践项目将涵盖从数据集准备、模型训练到性能评估的各个环节,全面展示如何利用深度学习技术检测Deepfake内容。......
  • Datawhale AI 夏令营——CV图像竞赛(Deepfake攻防)——Task3学习笔记
        这一篇是在数据增强的方向上发力,尝试提升模型的表现。        数据增强的目的是通过人工方式增加训练数据的多样性,从而提高模型的泛化能力,使其能够在未见过的数据上表现得更好。对于图像而言,数据增强包括例如视角、光照、遮挡等情况,使得模型能够学习到......
  • Datawhale Al夏令营——Transformer架构
    Transformer:这个模型架构就是摒弃了所有的循环结构,完全依赖于注意力机制对源语言序列和目标语言序列全局依赖的建模对于循环神经网络来说,上下文的语义依赖是通过维护循环单元中的隐状态实现的。在编码过程中,每一个时间步的输入建模都涉及到对隐藏状态的修改。随着序列长度的增加,......
  • DatawhaleAI夏令营 机器学习方向 学习笔记
    电力需求预测挑战赛理解赛题【训练时序预测模型助力电力需求预测赛题任务给定多个房屋对应电力消耗历史N天的相关序列数据等信息,预测房屋对应电力的消耗。赛题数据赛题数据由训练集和测试集组成,为了保证比赛的公平性,将每日日期进行脱敏,用1-N进行标识。即1为数据集最近一天,......
  • TASK 3 Datawhale AI 夏令营
    \(transformer\)解决任务1.特点摒弃了循环结构,通过自注意力机制衡量上下文单词的重要程度说人话就是联系前后单词对于该单词的影响来完成本单词的翻译2.运行逻辑在运行前,由于摒弃了循环结构,我们需要在词语中嵌入位置编码来构建单词的向量表示,模型利用每个词语的位置与维度构......
  • RK3588 tinyalsa_hal添加一个自定义声卡输入和输出
    一、添加输出声卡输出流程图:在声卡列表snd_out_sound_cards里添加一个自己的声卡,比如---a/tinyalsa_hal/audio_hw.h+++b/tinyalsa_hal/audio_hw.h@@-216,6+216,7@@enumsnd_out_sound_cards{SND_OUT_SOUND_CARD_SPDIF,SND_OUT_SOUND_CARD_SPDIF_1,......
  • Datawhale AI 夏令营——电力需求挑战赛——Task3学习笔记
        这一期学习进阶的特征提取与分析,构建深度学习方案,拿下更高分数,冲冲冲。项目链接:‌​​‬​‍​​​‌​‬‬⁠​​⁠​⁠​​​​⁠​​‍​​‍​​‌⁠‬​⁠​⁠‍‌​‌​​‍​Task3:尝试使用深度学习方案-飞书云文档(feishu.cn)    前两期介绍了......