1,概述
Android HAL(Hardware Abstract Layer)硬件抽象层,从字面意思可以看出是对硬件设备的抽象和封装,
为Android在不同硬件设备提供统一的访问接口。HAL处于Android framework和Linux kernel driver之间,
HAL存在的意义有以下2个方面:
1,HAL屏蔽了不同硬件设备的差异,为Android提供了统一的访问硬件设备的接口。
不同的硬件厂商遵循HAL标准来实现自己的硬件控制逻辑,但开发者不必关心不同硬件设备的差异,
只需要按照HAL提供的标准接口访问硬件就可以了。
2,HAL层帮助硬件厂商隐藏了设备相关模块的核心细节。硬件厂商处于利益考虑,不希望公开硬件设备相关的实现细节;
有了HAL层之后,他们可以把一 些核心的算法之类的东西的实现放在HAL层,而HAL层位于用户空间,不属于linux内核,
和android源码一样遵循的是Apache license协议,这个是可以开源或者不开的。
搞清楚了HAL存在的作用,就可以对其框架做个简单的总结。这里从以下3个方面来简单分析下HAL架构.
1,分析HAL的2个核心数据结构:hw_module_t 和 hw_device_t;
2,描述HAL是如何查询和加载设备动态共享库的;
3,以GPS为例,简单分析上层是如何使用HAL来访问硬件设备的。
本文基于android 6.0。
2, 数据结构
hw_module_t结构体:Android HAL将各类硬件设备抽象为硬件模块,HAL使用该结构体描述一类硬件抽象模块。
每个硬件抽象模块