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 层的存在方式
  • 层级之间的通信方式。

参考资料

相关推荐
墨天梦7 小时前
B17_LifecycleLiveData与Flow
android·kotlin
_祝你今天愉快8 小时前
UI核心 - 绘制流程(测量、布局、绘制)
android
冬奇Lab9 小时前
LLM 驱动的自动化测试系列(07):移动端自动化(三)——Mobile-Agent-v3 与自研 GUI-Owl 模型路线
android·人工智能·测试
leobertlan13 小时前
痛苦系列 | DSP-02 频域切片:DTFT与DFT的探索
android·后端
leobertlan13 小时前
痛苦系列 | DSP-01 从连续到离散:DSP基础与采样
android·后端
事圆则缓16 小时前
Android 视频压缩上传实战:从 content Uri、转码到断点续传
android
冉冉同学19 小时前
AI Agent 开始操作真实手机:移动端自动化的 3 个新考点
android·ai编程
帅得不敢出门19 小时前
Android Framework关闭软件低电关机功能测试PMIC低电保护
android
恋猫de小郭20 小时前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
墨天梦21 小时前
B16_Material主题与可访问交互
android·kotlin·交互