Android HIDL

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 [email protected]::IFoo, two packages are created:

[email protected]::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.

[email protected]::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

你可能感兴趣的:(Andorid)