Android硬件抽象层HAL之简介(一)

1.HAL简介

Android的HAL(Hardware Abstraction Layer,硬件抽象层)是建立在Linux内核之上的一套程序。这套程序不属于Linux内核,而是运行在用户空间。HAL层屏蔽了硬件的差异,为上层应用提供了统一的硬件操作接口,这样就可以将硬件和应用软件隔离开,应用软件不必关心底层的具体硬件,而硬件更改,只需要按照HAL接口规范和标准提供HAL程序即可,而不影响应用软件。
传统的Linux驱动中包含了访问硬件的寄存器代码和业务逻辑代码。Android HAL将Linux驱动进行了拆分,将访问硬件的寄存器代码保留到了Linux内核中,而将业务逻辑代码提取到HAL中。

如下图的Android系统架构图所示,HAL位于Android系统服务层之下,位于Linux内核之上。HAL层包含了很多设备的HAL子系统,如Camera HAL、Audio HAL、Graphics HAL等等。Android系统中各层的意义如下:
(1)应用框架
应用框架最常被应用开发者使用。作为硬件开发者,需要了解应用开发者API,因为很多此类API都可以直接映射到底层HAL接口,并可提供与实现驱动程序相关的实用信息。

(2)Binder IPC
Binder进程间通信(IPC)机制允许应用框架跨越进程边界并调用Android系统服务代码,这使得高级框架API能与Android系统服务进行交互。在应用框架级别,开发者无法看到此类通信的过程,但一切似乎都在“按部就班地运行”。

(3)系统服务
系统服务是专注于特定功能的模块化组件,例如窗口管理器、搜索服务或通知管理器。应用框架API所提供的功能可与系统服务通信,以访问底层硬件。Android包含两组服务:“系统”(诸如窗口管理器和通知管理器之类的服务)和“媒体”(与播放和录制媒体相关的服务)。

(4)硬件抽象层 (HAL)
HAL可定义一个标准接口以供硬件驱动开发人员实现,这可让Android忽略较低级别的驱动程序实现。借助HAL,硬件驱动开发人员可以顺利实现相关功能,而不会影响或更改更高级别的系统。HAL实现会被封装成模块,并会由Android系统适时地加载。

(5)Linux内核
开发设备驱动程序与开发典型的Linux设备驱动程序类似。Android使用的Linux内核版本包含一些特殊的补充功能,例如低内存终止守护进程(一个内存管理系统,可更主动地保留内存)、唤醒锁定(一种PowerManager系统服务)、Binder IPC驱动程序,以及对移动嵌入式平台来说非常重要的其他功能。这些补充功能主要用于增强系统功能,不会影响驱动程序开发。开发人员可以使用任意版本的内核,只要它支持所需功能(如Binder驱动程序)即可。不过,还是建议您使用Android内核的最新版本。

Android系统架构

2.为什么有HAL?

Linux内核采用GPL协议,则Linux内核的代码必须开源,而Linux驱动属于Linux内核的一部分,因此Linux驱动也必须开源。但是一些商业公司,驱动中包含了技术专利和商业秘密,如果开源会造成很大的损失。因此,谷歌为了保护这些厂家的利益,在应用层抽象了HAL,允许商业公司将硬件驱动业务代码放到HAL中而不用公开源代码。同时HAL也隔离了硬件和软件,降低了软件和硬件的耦合性。总之可总结出如下3点理由:
(1)统一硬件的调用接口。HAL层可以屏蔽Linux驱动复杂、不统一的接口。
(2)解决了GPL版权的问题。
(3)解决了一些特殊需求。对于有些硬件,可能需要访问一些用户资源或不方便在内核空间中完成工作,这这种情况下,可以利用处于用户空间的HAL程序辅助Linux驱动完成工作。

3.HAL现状

Android 8.0重新设计了Android操作系统框架,以便让供应商能够以更低的成本、更轻松、更快速地将设备更新到新版 Android系统。在新架构中,HAL接口定义语言(HIDL,发音为“hide-l”)指定了HAL和其用户之间的接口,让用户无需重新构建HAL,就能替换Android框架。HIDL将供应商实现的硬件驱动(由芯片制造商编写的设备专属底层软件)与Android操作系统框架分离开来。供应商或SOC制造商构建一次HAL,并将其放置在设备的/vendor分区中;Android可以在自己的分区中通过无线下载 (OTA)更新并进行替换,而无需重新编译HAL。

旧版Android架构与当前基于HIDL的架构的区别在于对供应商接口的使用:
(1)Android 7.x及更低版本中没有正式的供应商接口,因此设备制造商必须更新大量Android代码才能将设备更新到新版 Android系统。
旧版Android更新环境

(2)Android 8.0及更高版本提供了一个稳定的新供应商接口,因此设备制造商可以访问Android代码中特定于硬件的部分,这样一来,设备制造商只需更新Android操作系统框架,即可跳过芯片制造商直接提供新的Android版本。

当前Android更新环境

所有搭载Android 8.0及更高版本的新设备都可以利用这种新架构。为了确保供应商实现的向前兼容性,供应商接口会由供应商测试套(VTS)进行验证,该套件类似于兼容性测试套件(CTS)。开发者可以使用VTS在旧版Android架构和当前Android架构中自动执行HAL和操作系统内核测试。

参考资料

  1. https://source.android.google.cn/devices/architecture
  2. https://source.android.google.cn/devices/architecture/hal(Android 8.0之前的旧版HAL)
  3. https://source.android.google.cn/devices/architecture/hal-types(Android 8.0之后的新版HAL)
  4. Android深度探索 HAL与驱动开发(卷1)
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值