首页 > 移动平台 > 详细

读android系统源码情景分析笔记(一)

时间:2014-11-27 01:28:52      阅读:325      评论:0      收藏:0      [点我收藏+]

android2.3系统驱动模块由内核模块,硬件抽象模块,用户调用模块(jni)组成,内核模块和linux一致,硬件抽象模块主要需要定义两个结构:hw_module_t和hw_device_t。

hw_module_t包含模块id,版本号,署名和一个函数指针:

int open (struct hw_module_t* module, const char* id, struct hw_device_t** device); 

hw_device_t包含版本,hw_module_t的引用和一个函数指针:

int close (struct hw_device_t* device);

必须导出一个HAL_MODULE_SYM符号引用hw_module_t结构。可以对这两个结构自定义,通过把这两个结构定义在自定义结构的开头(C惯用伎俩)。

用户调用模块通过hw_get_module函数加载硬件抽象模块。

int hw_get_module (const char* id, const struct hw_module_t** module);

第二个参数module接收硬件抽象模块导出的符号HAL_MODULE_SYM指向的结构体。

 用户调用模块通过其提供的open方法打开指定id的设备,第二个参数device接收一个hw_device_t结构。open函数根据不同设备可以返回不同的hw_device_t结构,其中的close函数也可能不同。

然后用户调用模块就可以通过hw_device_t或自定义的结构调用close或自定义函数进行关闭或其他操作了。由于是在用户层,所以需要修改ueventd.rc修改内核模块提供的设备文件的访问权限。

读android系统源码情景分析笔记(一)

原文:http://www.cnblogs.com/fightingCat/p/4125479.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!