Android HIDL HAL 接口定义语言详解

1. HIDL 概述

在 Andoird 8.0 版本框架代码中,加入了 HIDL(HAL 接口定义语言),HIDL 的出现是为了将用户层和 HAL 层分割开,它指定了 HAL 和用户之间的接口,让用户能够替换 Android 框架,而无需重新编译 HAL,以便让厂商能够以更低的成本、更快速地将设备更新到新版 Android 版本中。

通俗的来说,HIDL 设计了一套通过的框架接口,将 HAL 层实现与 Android 操作系统框架分离开来,设备厂商只需要构建一次 HAL,并将其放置在 /vendor 分区中,便能适应大部分 Android 操作系统框架版本的升级。

image

图:HIDL 设计下的升级方式

在 HIDL 设计理念中,HAL 模块以一个独立的 Service 运行,用户通过 Binder IPC 与 HAL 模块进行通信。因此 在 Android 8.0 以上的版本中查看用户进程会发现很多 HAL 模块 Service 运行,如下:

consule:/ $ ps -A | grep android.hardware
system         219     1    9728   4852 0                   0 S android.hardware.keymaster@3.0-service
audioserver    235     1   21268   8916 0                   0 S android.hardware.audio@2.0-service
bluetooth      236     1    7716   3408 0                   0 S android.hardware.bluetooth@1.0-service
cameraserver   237     1   28412  11948 0                   0 S android.hardware.camera.provider@2.4-service
media          238     1   10232   4312 0                   0 S android.hardware.cas@1.0-service
system         239     1    9976   3648 0                   0 S android.hardware.configstore@1.1-service

这些 Service 提供了设备 HAL 模块具体接口实现(由 HIDL 主导设计),这些接口独立于 Android 平台与设备厂商 HAL 实现。下面会主要以 HIDL 设计下 Android 9.0 composer HAL 实现来插入分析。

2. HIDL 设计分析

HIDL 是一种接口定义语言,描述了 HAL 和它的用户之间的接口,因此首先需要设计一套通用接口实现。HIDL 为每个 HAL 模块设计了不同接口定义 hal 文件,以 .hal 结尾,在 hidl-gen 工具的帮助下即可自动编译生成对应接口 C++ 实现或者 Java 实现。

下面先来理清几个概念。

2.1 软件包

Google 为每个 HAL 模块设计一个接口软件包,大部分 HIDL 接口软件包位于 hardware/interfaces 下,hardware/interfaces 顶层会直接映射到 android.hardware 软件包命名空间,软件包名称可以具有子级,表示接口软件包的版本,如 HAL Service:android.hardware.graphics.composer@2.1-service 的接口软件包可以在 hardware/interfaces/graphics/composer/2.1 目录下找到。

下表列出了 Android 所有软件包前缀和位置:

软件包前缀 位置
android.hardware.*
Android HIDL(Hardware Interface Definition Language)是一种用于定义硬件抽象层(HAL)接口的语言。它旨在提供一个标准化的接口规范,以促进硬件和软件之间的互操作性。 根据官方网站的介绍,Android HIDL允许将早期版本的Android设备升级为使用Android O。通过将传统的HAL封装到新的HIDL接口中,HALAndroid框架之间的通信变得更加透明。这种封装可以在绑定模式和同进程(直通)模式下提供HAL,并具有跨设备兼容性的优势。 Android 8.0引入了Treble项目,旨在重新设计Android操作系统框架,以解决系统版本碎片化问题和复杂的系统更新流程。Treble引入了HIDL作为其核心组件之一,以提供更好的硬件和软件兼容性。 综上所述,Android HIDL是一种用于定义硬件抽象层接口的语言,它在Android O及其后续版本中起到了重要的作用,帮助解决Android系统版本碎片化和系统更新的难题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Android HIDL(1) ---- 概述](https://blog.youkuaiyun.com/h_8410435/article/details/126283950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Android HIDL 详解](https://blog.youkuaiyun.com/ismartv_dagou2/article/details/124361229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值