android系统开发HAL层开发基础_第1页
android系统开发HAL层开发基础_第2页
android系统开发HAL层开发基础_第3页
android系统开发HAL层开发基础_第4页
android系统开发HAL层开发基础_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、android系统开发-HAL层开发基础AiidioidHAL层,即硬件抽彖层,是Google响应厂家“希望不公开源码”的要求推出的新概念源代码和目标位置源代码:/haidware/libliardware目录,该目录的目录结构如下:/hadwae/libhaidvaTe/haKiwawc编译成libhardware.so,目标位置为/svstenVlib目录/haidwae/libh3Tdvcue/includhaidvaTe目录卜包含如卜头文件:hardware.h通用硬件模块头文件copybit.hcopybit模块头文件gralloc.hgralloc模块头文件llghts.ll背光模

2、块头文件overlay.hoverlay模块头文件qemud.hqemud模块头文件sensors.li传感器模块头文件/hardware/libhardware/modules目录卜定义了很多硬件模块这些硬件模块都编译成xxx.xxx.so,目标位置为/system/lib/hw目录HAL层的实现方式JNI通用硬件模块-硬件模块内核驱动接II具体一点:JNI-libhardware.so-xxx.xxx.so-kernel具体来说:androidframeworks中JNI调用/haTdwaie/libhaKkvaie/haidwcue.c中定义的hw_get_module函数来获取硬件模块

3、,然后调用硬件模块中的方法,硬件模块中的方法直接调用内核接II完成相关功能通用硬件模块(libhardware.so)(1)头文fF为:/haTdwaie/libhanhvare/iiichide/haidwaie/haTdwaie.h头文件中主要定义了通用硬件模块结构体hw_module_t,声明了JNI调用的接丨1函数hv_get_modulehw_module_t定义如卜:tvpedefstmcthw_module_t/*tagmustbeinitializedtoHARDXVARE_MODULE_TAG*/uint32_ttag;/*majorversionnumberforthemo

4、dule*/uiiitl6_tversion_niajor;/*niniorversionnumberofthemodule*/uiiitl6tversionninior;/*Identifierofmodule*/constchar*id;/*Nameoftliismodule*/constchar*name;/*Author/ownei/iiuplementorofthemodule*/constchar*author;/*Modulesmethods*/stmcthw_module_methods_t*methods;硬件模块的方法/*modulesdso*/void*dso;/*pad

5、dmgto128bytes,resentedforfiituieuse*/uint32_treserv-ed32-刀;hw_module_t;硬件模块方法结构体hw_module_metliods_t定义如卞:tvpedefstmcthw_module_m亡thods_t/*Openaspecificdevice*/iiit(*open)(conststiucthw_module_t*module,constchai*id.stmcthw_device_t*device);hw_module_methods_t;只定义了一个open方法,其中调用的设备结构体参数hw_device_t定义如卞:

6、tvpedefstmcthw_device_t/*tagmustbeinitializedtoHARDWARE_DEVICE_TAG/umt32_ttag;/*versionnumberforhw_device_t*/uint32_tversion;/*referencetothemodulethisdevicebelongsto*/stmcthw_module_t*module;/*paddmgresen-edforfiituieuse*/umt32_tresen-ed12;/*Closetliisdevice*/iiit(*close)(stmcthw_device_t*device);h

7、w_device_t;hw_get_module函数声明如卜:mthw_geCmodule(constcliai*id.conststmcthw_module_t*module);参数id为模块标识,定义在/haidware/libliardware/mclude/haidware目录卜的硬件模块头文件中,参数module是硕件模块地址,定义了/haidwae/libhardwaTe/include/haKiwai已/hardwaie.h中(2)hardware.c中主要是定义了hw_get_module函数如F:#defineHAL_LIBRARY_PATH7systenVlib/hwHst

8、aticconstchar*variaiit_keys=Hro.haidwaie,Hduct.board,Hro.board.platfbnn,Hro.archH;staticconstmtHAL_VARIANT_KEYS_COUNT=(sizeof(vanaiickeys)/sizeof(vaiiant_keys0);mthw_get_module(constcliai*id.conststmcthw_module_t*module)mtstatus;inti;conststmcthwmodulet*hmi=NULL;chai-propPATH_MAX;cluu-pathPATH

9、.MAX;for(1=0;iHAL_VARIANT_KEYS.COUNT+1;i+)if(iHAL_VARIANT_KEYS_COUNT)if(pioperty_get(variaiit_keys1,prop.NULL)=0)continue;snprintf(path,sizeof(path),n%s/%s.%s.son,HAL_LIBRARY_PATH,id,prop);elsesnprintf(path,sizeof(path),n%s/%s.default.soM,HAL_LIBRARY_PATH,id);if(access(path,R_OK)contmue;/*wefoundali

10、brarymatchingthisid/vaiiant*/break;status=-ENOENT;if(iHAL_VARIANT_KEYS_COUNT+1)/*loadthemodule,ifthisfoils,we*redoomed,andweshouldnottiy*toloadadifferentvariant.*/status=loaded,path,module);returnstatus;从源代码我们可以看出,hw_get_module完成的主要工作是根据模块id寻找硬件模块动态连接库地址,然后调用load函数去打开动态连接库并从动态链接库中获取硬件模块结构体地址。硕件模块路径格

11、式如下:HAL_LEBRARY_PArHp,soHAL_LIBRARY_PATH定义为/system/lib/hwid是hw_get_module函数的第一个参数所传入,prop部分首先按照vanant_keys数组中的名称逐一调用propertv_get获取对应的系统属性,然后访问HAL_LLBRARY_PATHid.piop.so,如呆找到能访问的就结束,否则就访问HAL_LIBRARY_PArH/id.default.so举例如下:假定访问的是背光模块,id定义为“lights呗ij系统会按照如卞的顺序去访问文件:/systenVlib/liw/lights.ro.haidw

12、aie属性值so/systenVlib/liw/duct.board属性值so/systenVlib/hw/lights.ro.board.platform属性值.so/systenVlib/hw/lights.ro.arch属性值.so/systenVlib/liw/lights.defoult.so所以开发硬件模块的时候Makefile文件(Android.mk)中模块的命名LOCAL_MODULE要参考上面的内容,否则就会访问不到没作用了。load函数的关键部分代码如下:handle=dlopen(patli,RTLD_NOW);打开动态链接库if(handle

13、=NULL)cliarconst*en_str=dleiTor();LOGE(nload:module=%sii%spath,en_str?en_stinuiikiiownH);status=-EINVAL;gotodone;constchar*sym=HAL_MODULE_INFO_SYM_AS_STR;hmi=(stmcthw_module_t*)dlsym(handle,sym);从动态链接库中获取硕件模块结构体的指针if(lmu=NULL)LOGE(nload:couldiftfindsymbol%ssvm);status=-EINVAL;gotodone;HAL_MODULE_INFO_SYM_AS_STR是硬件模块在动态链接库中的标志,定义在hardware.h中如下:defineHAL_MODULE_INFO_SYMHXDdefineHAL_MODULE_INFO_SYM_AS_STR”HMI”硬件模块硬件模块的开发主要是完成/hardware/libhaidware/mchide/hardware目录F对应的头文件中的内容,主要是硬件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论