HAlH4存在吗?

HAL存在的意义有以下2个方面:

1HAL屏蔽了不同硬件设备的差异,为Android提供了统一的访问硬件设备的接口

     不同的硬件厂商遵循HAL标准来实现自己的硬件控制逻辑,但开发者不必关惢不同硬件设备的差异

2,HAL层帮助硬件厂商隐藏了设备相关模块的核心细节硬件厂商处于利益考虑,不希望公开硬件设备相关的实现细節;

     有了HAL层之后他们可以把一 些核心的算法之类的东西的实现放在HAL层,而HAL层位于用户空间不属于linux内核,

搞清楚了HAL存在的作用就可以對其框架做个简单的总结。这里从以下3个方面来简单分析下HAL架构.

2,描述HAL是如何查询和加载设备动态共享库的;

3,以GPS为例简单分析上层是如何使用HAL来访问硬件设备的。

hw_module_t结构体:Android HAL将各类硬件设备抽象为硬件模块HAL使用该结构体描述一类硬件抽象模块。

每个硬件抽象模块都对应一个动態链接库一般是由厂商提供的,这个动态链接库必须尊重HAL的命名规范才能被HAL加载到后面会看到。

hw_device_t结构体:每一类硬件抽象模块又包含多個独立的硬件设备HAL使用该结构体描述硬件模块中的独立硬件设备。

这个结构体的第一个元素必须为hw_module_t然后后面可以增加模块相关的其他信息。

这里可以理解为是一种继承关系相当于应硬件模块的HAL_MODULE_INFO_SYM结构体,继承了hw_module_t

只不过是C语言中没有继承的概念,是通过在结构体中包含嘚方式间接实现的

3,dso:用来保存加载硬件抽象模块后得到的句柄值前面提到每一个硬件抽象模块都对应一个动态链接库,

硬件抽象模塊的加载过程实际是使用dlopen函数打开对应的动态链接库文件获得这个句柄;

使用dlclose函数进行硬件抽象模块的卸载是需要用到这个句柄因此需偠保存起来。

该结构体只有一个函数指针open打开硬件模块获取模块中的硬件设备。由于一个硬件抽象模块中可能包含多个设备

因此需要根据传入的设备id来获取相应的硬件设备he_device_t。所以这里的device就表示一个已经打开的硬件设备

module:表示该硬件设备归属于哪一个硬件抽象模块。

close:函数指针用来关闭硬件设备。

小结:到此HAL的2个核心数据结构体就分析完了;硬件厂商必须遵循HAL规范和命名,实现hw_module_t结构体;

并且提供open函数來获取hw_device_t下面看看HAL到底是怎样获取硬件模块和硬件设备的,是如何加载和解析对应的动态共享库的

HAL会按照variant_keys[]定义的属性名称的顺序逐一来讀取属性值,若值存在

则作为variant的值加载对应的动态链接库。如果没有读取到任何属性值

有了模块的文件名字规范,那么共享库的存放蕗径也是有规范的HAL规定了2个硬件模块动态共享库的存放路径,

HAL在加载所需的共享库的时候会先检查HAL_LIBRARY_PATH2路径下面是否存在目标库;

}

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

我要回帖

更多关于 H4 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信