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

news/2024/9/20 5:21:15/文章来源:https://www.cnblogs.com/bluestorm/p/18316225

背景:

官方: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

 

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

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

相关文章

Halcon的Blob分析

一、Blob分析流程及常用算子 1.基本步骤 Blob分析的基本步骤,这是一种理想状态,也是最基本的套路,获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)。 halcon代码实现如下: read_image(Image,‘particle’) threshold(Image, …

U454574

好奇怪的题,玩空洞的时候想到的,但原来草稿纸丢掉了qwq,懒,什么时候来补吧 看到这个很容易想到dp,设dp[i]为到第i个点的最小时间。然后用dp[i]更新后面。考虑判定如何从一个点走到另一个点。我们发现,平移原来的跳跃路径是没有关系的。通过数学方法和感新理解可以发现前面…

蓝牙H4传输层协议

蓝牙H4传输层协议蓝牙几种不同接口的传输协议:H2/H4/H5/BCSP/SDIO及区别 H2:基于USB的传输H4:基于五线UART(RX/TX/CTS/RTS/GND带硬件流控)的传输,最简单的传输方式,只在HCI raw data前面加上一个type;H5: 基于三线UART(RX/TX/GND)的传输,需要软件协议层加一个数据完整性校…

模块2 面向对象编程初级 --- 第四章:创建类

第四章 创建类 主要知识点:1、类的定义2、类的修饰 学习目标:掌握类的定义方法,能够编写简单的类。 4.1 类的定义问题空间元素在方法空间中的表示称为对象,面向对象的程序设计是以解决的问题中所涉及到的各种对象为主要考虑因素,更加贴近于人的思维方式,面向对象程序设计…

UOS系统部署KingbaseES V8R6 java故障“InvocationTargetException”

KingbaseES案例说明: 在UOS系统下部署KingbaseES V8R6数据库时,出现Java错误,部署失败。 系统版本: kingbase@srv01:~$ cat /etc/os-release PRETTY_NAME="UnionTech OS Server 20 " NAME="UnionTech OS Server 20 " VERSION_ID="20" VERSIO…

卷积神经网络CNN实战:MINST手写数字识别——数据集下载与网络训练

数据集下载 这一部分比较简单,就不过多赘述了,把代码粘贴到自己的项目文件里,运行一下就可以下载了。 from torchvision import datasets, transforms# 定义数据转换,将数据转换为张量并进行标准化 transform = transforms.Compose([transforms.ToTensor(), # 转换为张量t…

winform--穿梭框

新建一个用户控件: 直接上代码:/** 作者:pengyan zhang* 邮箱:3073507793@qq.com* 博客:https://www.cnblogs.com/zpy1993-09* 时间:2024-04-10 16:36*/public partial class ShuttleFrameControl : UserControl{private Color lb_BackColor { get; set; } = Color.Trans…

mpc

https://blog.csdn.net/apr15/article/details/133965768在“数据安全概述”里面, 我们提到了安全多方计算SMPC(Secure multi-party computation)的技术。在这个计算里面代表是密码分享SS (secret sharing)技术。 而开启整个算法世界的其实是华人科学家姚期智教授, 他提出…

一般网站制作流程

制作需要经过以下几个流程:设计页面效果图,一般为PSD或者PNG格式的原图; 将页面效果图输出为HTML格式,后缀名为“.htm”; 根据页面内容调用需求生成或者编写标签所需代码; 嵌套标签代码到输出页面对应位置; 测试调试模板文件,保证调用和设计效果一致; 将模板标签、文件…

帝国CMS的网站“Notice: Use of undefined constant”错误说明

“Notice: Use of undefined constant”错误说明解答:php.ini配置问题,按下面修改即可解决: 修改php.ini,把error_reporting = E_ALL改成 error_reporting = E_ALL & ~E_NOTICE扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精…

DASCTF 2023六月挑战赛|二进制专项 PWN (上)

DASCTF 2023六月挑战赛|二进制专项 PWN (上) 1.easynote edit函数对长度没有检查free函数存在UAF漏洞思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使用fastbin attack,把__malloc_hook,写入one_gadget 2.通过unlink修改free got表为system exp: from pwn import * co…

易优cms后台数据类型的开关功能如何默认都显示“开”

新建字段默认就是true,就是扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专…