Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm

Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm

ID:37909436

大小:306.50 KB

页数:20页

时间:2019-06-02

Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm_第1页
Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm_第2页
Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm_第3页
Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm_第4页
Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm_第5页
资源描述:

《Android HAL的框架及Sensor HAL stub的实现方法_20110603lgm》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、AndroidHAL框架及SensorHALstub的实现方法收集网络上的这部分信息,系统整理如下,如发现有谬误或有更好的建议,请联系:第一部分AndroidHAL框架1.1.HAL简介Android的HAL(HardwareAbstractLayer硬件抽象层)是Google因应厂商「希望不公开源码」的要求下,所推出的新观念,其架构如下图。虽然HAL现在的「抽象程度」还不足,现阶段实作还不是全面符合HAL的架构规划,不过也确实给了我们很好的思考空间。图1:AndroidHAL架构规划这是PatrickBrady(Goog

2、le)在2008GoogleI/O所发表的演讲「Anatomy&PhysiologyofanAndroid」中,所提出的AndroidHAL架构图。从这张架构图我们知道,HAL的目的是为了把Androidframework与Linuxkernel完整「隔开」。让Android不至过度依赖Linuxkernel,有点像是「kernelindependent」的意思,让Androidframework的开发能在不考虑驱动程序的前提下进行发展。在Android原始码里,HAL主要的实作储存于以下目录:1.hardware/lib

3、hardware_legacy/-过去的实作、采取链接库模块的观念进行2.hardware/libhardware/-新版的实作、调整为HALstub的观念3.hardware/ril/-RadioInterfaceLayer在HAL的架构实作成熟前(即图1的规划),我们先就目前HAL20现况做一个简单的分析。另外,目前Android的HAL实作,仍旧散布在不同的地方,例如Camera、WiFi等,因此上述的目录并不包含所有的HAL程序代码。1.1.HAL的过去和现在(1)HAL的过去:图2:AndroidHAL/libh

4、ardware_legacy过去的libhardware_legacy作法,比较是传统的「module」方式,也就是将*.so档案当做「sharedlibrary」来使用,在runtime(JNI部份)以directfunctioncall使用HALmodule。透过直接函数呼叫的方式,来操作驱动程序。当然,应用程序也可以不需要透过JNI的方式进行,直接以加载*.so檔(dlopen)的做法呼叫*.so里的符号(symbol)也是一种方式。总而言之是没有经过封装,上层可以直接操作硬件。(2)HAL的现状:20图3:Andr

5、oidHAL/libhardware现在的libhardware作法,就有「stub」的味道了。HALstub是一种代理人(proxy)的概念,stub虽然仍是以*.so檔的形式存在,但HAL已经将*.so档隐藏起来了。Stub向HAL「提供」操作函数(operations),而runtime则是向HAL取得特定模块(stub)的operations,再callback这些操作函数。这种以indirectfunctioncall的实作架构,让HALstub变成是一种「包含」关系,即HAL里包含了许许多多的stub(代理人)

6、。Runtime只要说明「类型」,即moduleID,就可以取得操作函数。对于目前的HAL,可以认为Android定义了HAL层结构框架,通过几个接口访问硬件从而统一了调用方式。(3)HAL_legacy和HAL的对比:HAL_legacy:旧式的HAL是一个模块,采用共享库形式,在编译时会调用到。由于采用functioncall形式调用,因此可被多个进程使用,但会被mapping到多个进程空间中,造成浪费,同时需要考虑代码能否安全重入的问题(threadsafe)。HAL:新式的HAL采用HALmodule和HALstu

7、b结合形式,HALstub不是一个sharelibrary,编译时上层只拥有访问HALstub的函数指针,并不需要HALstub。上层通过HALmodule提供的统一接口获取并操作HALstub,so文件只会被mapping到一个进程,也不存在重复mapping和重入问题。1.1.HALmodule的架构HALmoudle主要分为三个结构:structhw_module_t;structhw_module_methods_t;structhw_device_t;它们的继承关系如下图:20图4:AndroidHAL结构继承关

8、系1.1.HAL的使用方法(1)Nativecode通过hw_get_module调用获取HALstub:hw_get_module(LED_HARDWARE_MODULE_ID,(consthw_module_t**)&module)(2)通过继承hw_module_methods_t的callbac

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。