Android HAL 层概览

引子

按照既定的计划,在讲解了 Activity 启动过程以后,接下来我们就要讲 Activity 的显示过程了。但是 Activity 显示过程会涉及到两个 Hal 模块 Gralloc 和 Hardware Composer,不懂话,去看代码就会很懵逼。

所以我们就先把 Hal 学了吧。

Android HAL(Hardware Abstract Layer)硬件抽象层,从字面意思可以看出是对硬件设备的抽象和封装,为 Android 在不同硬件设备提供统一的访问接口。HAL 处于 Android framework 和 Linux kernel driver 之间,HAL 存在的意义有以下 2 个方面:

  • HAL 屏蔽了不同硬件设备的差异,为 Android 提供了统一的访问硬件设备的接口。不同的硬件厂商遵循 HAL 标准来实现自己的硬件控制逻辑,Framework 开发者不必关心不同硬件设备的差异,只需要按照 HAL 提供的标准接口访问硬件就可以了。
  • HAL 层帮助硬件厂商隐藏了设备相关模块的核心细节。硬件厂商处于利益考虑,不希望公开硬件设备相关的实现细节;有了HAL层之后,他们可以把一些核心的算法之类的东西的实现放在 HAL 层,而 HAL 层位于用户空间,不属于 linux 内核,和 android 源码一样遵循的是 Apache license 协议,这个是可以不开源的。

Android 经过多年的迭代,HAL 层也经历了三个阶段:

  • Android 8 以前的 HAL,我们称之为传统 HAL
  • Android 8 到 Android 10 的 HAL,为了更好的解耦 google 和硬件厂商之间的代码,Android 8 在 HAL 中引入了 HIDL,这个阶段的 HAL,我们称之为 HIDL HAL
  • Android 11 开始,又引入了 AIDL 来简化 HDIL HAL,我们称之为 AIDL HAL

googler 你们天天刷 KPI,不考虑下游的打工仔吗?

Android 8 以前的 HAL,传统 HAL

在这个阶段,HAL 层以 so 库的形式存在,Framework 层通过 JNI 加载到这些 so 库,然后 Framework 层通过 Binder 服务的形式向 App 提供操作硬件的接口。

Android 8 到 Android 10 的 HIDL HAL

在这个阶段,HAL 层以进程加 Binder 服务的形式存在,Framework 层通过 HIDL 调用到 HAL 层的 Binder 服务,然后 Framework 层通过 Binder 服务的形式向 App 提供操作硬件的接口。

Android 11 以后的 AIDL HAL

在这个阶段,HAL 层以进程加 Binder 服务的形式存在,App 直接通过 AIDL 访问到 HAL 层的 Binder 服务来操作硬件。

总结

google 迭代了 3 类 HAL,实际改变的就是:

  • Hal 层的存在方式
  • 层级之间的通信方式。

参考资料

相关推荐
YB13758 小时前
jetpack compose 副作用 SideEffect
android·kotlin
CHB10 小时前
uni-app x 蒸汽模式 性能测试基准报告 Benchmark【Android版】
android·ios·uni-app
带娃的IT创业者11 小时前
拆掉那堵墙:LibrePods 如何让 AirPods 在 Android 上重获新生
android·开源项目·airpods·librepods·生态解锁
_阿南_13 小时前
flutter 展示的字体突然奔放了
android·flutter·ios
文人sec15 小时前
MySQL事务与索引做了什么?
android·笔记·mysql
刘洋浪子16 小时前
AndroidStudio保存日志菜单
android
朱涛的自习室16 小时前
从 Prompt 到 Graph:AI 工程的进化史
android·前端·人工智能
2501_9327502617 小时前
Android 中 Serializable 与 Parcelable 的对比与选择
android
FungLeo18 小时前
Flutter 两个反直觉布局坑:ListTile 水波纹 / VerticalDivider 踩坑实录
android·flutter
1570925113418 小时前
ViewBinding与DataBinding区别与选型
android