HIDL概述【转】

本文转载自:https://blog.csdn.net/u013357557/article/details/84561457

HIDL背景
Treble 是 Google Android 团队的一项重大项目,意在 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Android 7.x 及更早版本中没有正式的供应商接口,因此设备制造商必须更新大量 Android 代码才能将设备更新到新版 Android 系统:


图1 Treble 推出前的Android 更新环境

Android O以后,Treble 提供了一个稳定的新供应商接口,供设备制造商访问 Android 代码中特定于硬件的部分,这样一来,设备制造商只需更新 Android 操作系统框架,即可跳过芯片制造商直接提供新的 Android 版本:

图2 Treble 推出后的Android 更新环境

HIDL简介
HIDL 是用于指定 HAL 与其用户之间接口的一个接口描述语言(Interface Description Language),它允许将指定的类型与函数调用收集到接口(Interface)和包(Package)中。更广泛地说,HIDL 是一个可以让那些独立编译的代码库(Libraries)之间进行通信的系统。 HIDL 实际上是用于进行进程间通信(Inter-process Communication,IPC)的。进程间的通信可以称为 Binder 化(Binderized)。对于必须连接到进程的库,也可以使用 passthough 模式(但在Java中不支持)。 HIDL 将指定的数据结构与方法签名组织到接口中,这些接口又会被收集到包中以供使用。它的语法与 C++、JAVA 是类似的,不过关键字集合不尽相同。其注释风格与 JAVA 是一致的。

HIDL设计
设计 HIDL 这个机制的目的,主要是想把框架(framework)与 HAL 进行隔离,使得框架部分可以直接被覆盖、更新,而不需要重新对 HAL 进行编译。HAL 的部分将会放在设备的 /vendor 分区中,并且是由设备供应商(vendors)或 SOC 制造商来构建。这使得框架部分可以通过 OTA 方式更新,同时不需要重新编译 HAL。

3.1直通式HAL( Passthrough 模式)和 绑定式 HAL (Binderized模式)
    为了将以往设备的 Android 版本更新到 Android O,开发者需要将传统的 HAL 封装到新的 HIDL 接口中,这个接口为 HAL 提供了 Binder 化以及 Passthrough 模式。这个封装过程对 HAL 以及 Android Framework 都是透明的。
   Passthrough 模式仅对 C++ 客户端与实现适用,以往的 Android 版本设备中,HAL 不会采用 JAVA 语言来写,所以 JAVA HAL 必然是 Binder 化的。

绑定式 HAL。以 HAL 接口定义语言 (HIDL) 表示的 HAL。这些 HAL 取代了早期 Android 版本中使用的传统 HAL 和旧版 HAL。在绑定式 HAL 中,Android 框架和 HAL 之间通过 Binder 进程间通信 (IPC) 调用进行通信。所有在推出时即搭载了 Android 8.0 或后续版本的设备都必须只支持绑定式 HAL。大致框架图如下,对于Android O之前的设备,对应图1,对于从之前的设备升级到O的版本,对应图2、图3. 对于直接基于Android O开发的设备,对应图4。

在Android O之前,HAL是一个个的.so库,通过dlopen来进行打开,库和framework位于同一个进程。如图3所示:

图3 Android O之前Framework跟HAL的通信

在Android O之后,framework和hal运行于不同的进程,所有的HAL采用新的HIDL技术来完成。

图4 Android O之后Framework跟HAL的通信

参考文献
1、 Android HIDL 简介

https://blog.csdn.net/qidi_huang/article/details/76572404

2、 Android HIDL学习(1) ---- 简介

https://www.jianshu.com/p/b3a2c7117ccc

3、Android HIDL学习(2) ---- HelloWorld

https://www.jianshu.com/p/ca6823b897b5

4、探索hidl-gen使用及IWifi.hal 实现

https://blog.csdn.net/sinat_20059415/article/details/81808212

5、在Android 8.0之后版本上添加Hidl Service

https://blog.csdn.net/anlory/article/details/82025916

6、AndroidO Treble架构下hwservicemanager启动过程

https://blog.csdn.net/marshal_zsx/article/details/80293163

7、Android8.1HAL层开发

https://blog.csdn.net/u013082948/article/details/80529419    //重点

8、android中SELINUX规则分析和语法简介

https://www.2cto.com/kf/201504/390742.html

9、如何关闭JACK编译器

https://blog.csdn.net/qilu0882/article/details/81328953

10、Android Treble架构解析

https://www.cnblogs.com/wangzhe1635/p/9034640.html

11、关闭Android jack 编译

https://blog.csdn.net/kkguo1990/article/details/74738901
---------------------
作者:Gunder
来源:CSDN
原文:https://blog.csdn.net/u013357557/article/details/84561457
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/10952718.html