Android HIDL
1. 什么是HIDL?
-
HIDL, 全称为Hardware Interface Definition Language,是用于指定 HAL 与其用户之间接口的一个接口描述语言,它允许将指定的类型与函数调用收集到接口(Interface)和包(Package)中。
-
HIDL 在 Android Project Treble 中被起草,在 Android 8.0 (O版本) 中被全面使用,其诞生目的是使 Android 可以在不重新编译 HAL 的情况下对 Framework 进行 OTA 升级。
-
HIDL 用于进程间通信(Inter-process Communication,IPC). 将传统的 HAL 封装到 HIDL 接口中,这个接口为 HAL 提供了 binderized 以及 Passthrough 两种通信模式实现。
-
在Android O版本升级中,使用 HIDL 描述的 HAL 描述文件替换旧的用头文件描述的 HAL 文件的过程称为HAL 的 binder 化(binderization)。已发布的 HIDL package包位于 Android 代码库的hardware/interfaces/或vendor/目录下。使用 HDIL 描述的 HAL 接口存放在这些目录下的.hal文件中。
2. HIDL的设计原则
HIDL的设计目标是,Framework (对应Android System镜像) 可以在无需重新构建 HAL 的情况下进行替换。HAL 将由供应商或 SOC 制造商构建,放置在设备的 /vendor 分区中。由于HAL与Framework 之间的接口已经按照HIDL统一的规范整理,并按照版本发布,这样一来,framework就可以在其自己的分区中通过 OTA 进行替换,而无需重新编译 HAL。
HIDL 设计在以下方面之间保持了平衡:
- 互操作性。在可以使用各种架构、工具链和编译配置来编译的进程之间创建可互操作的可靠接口。HIDL 接口是分版本的,发布后不得再进行更改。
- 效率。HIDL 会尝试尽可能减少复制操作的次数。HIDL 定义的数据以 C++ 标准布局数据结构传递至 C++ 代码,无需解压,可直接使用。此外,HIDL 还提供共享内存接口;由于 RPC 本身有点慢,因此 HIDL 支持两种无需使用 RPC 调用的数据传输方法:共享内存和快速消息队列 (FMQ)。
- 直观。通过仅针对 RPC 使用 in 参数,HIDL 避开了内存所有权这一棘手问题(请参阅 Android 接口定义语言 (AIDL));无法从方法高效返回的值将通过回调函数返回。无论是将数据传递到 HIDL 中以进行传输,还是从 HIDL 接收数据,都不会改变数据的所有权,也就是说,数据所有权始终属于调用函数。数据仅需要在函数被调用期间保留,可在被调用的函数返回数据后立即清除。
3. Binderizing passthrough HALs
(Binderizing passthrough HALs)
You can binderize HAL implementations that support passthrough mode. Given a HAL interface a.b.c.d@M.N::IFoo, two packages are created:
a.b.c.d@M.N::IFoo-impl
Contains the implementation of the HAL and exposes function IFoo* HIDL_FETCH_IFoo(const char* name)
. On legacy devices, this package is dlopened and the implementation is instantiated using HIDL_FETCH_IFoo
. You can generate the base code using hidl-gen and -Lc+±impl and -Landroidbp-impl.
a.b.c.d@M.N::IFoo-service
.
Opens the passthrough HAL and registers itself as a binderized service, enabling the same HAL implementation to be used as both passthrough and binderized.
4.HIDL 语法
见链接:
https://blog.csdn.net/qidi_huang/article/details/76572404
5. HIDL 例子编写
https://www.jianshu.com/p/ca6823b897b5
6. 术语解释
https://blog.csdn.net/qq_16775897/article/details/78307276
7. VTS 测试
HIDL 与 Android Vendor Test Suite (VTS) 测试有紧密的联系。
https://blog.csdn.net/qidi_huang/article/details/76653677