转自 : http://blog.csdn.net/a345017062/article/details/6423866


以backlight这种设备为例来说明一下Android系统中模块与设备的关系。Android中的backlight、keyboard等多个设备都使用同一个名字为lights的模块(即/system/lib/hw/light.xxx.so)来进行操作。

涉及到的文件有:

/hardware/libhardware/hardware.c

/hardware/include/libhardware/hardware.h

/hardware/include/libhardware/lights.h

/hardware/msm7k/liblights/lights.c

这其中,hardware.c是提供给上层访问所有硬件设备的通用接口,负责加载某一种设备的操作模块(比在这里就是负责加载用于操作backlight等设备的lights模块的)。

而lights.c是系统中的lights模块源码。

先看一下总接口hardware.c吧。

这里面两个函数做了三件事:检索模块、加载模块、提取模块信息。我着重看一下提取模块信息:

hmi = (struct hw_module_t *)dlsym(handle, sym);

其中的sym永远都是字符串HMI,即hardware module information。最后得到的hw_module_t结构体包含了一个模块的所有信息,这里都有什么呢?可以在hardware.h中看一下hw_module_t的定义。

hardware.h中的每一项在一个模块中都要进行定义,lights模块当然也是。看一下lights.c中,唯一作用范围是全局的也就是这个东西了:

const struct hw_module_t HAL_MODULE_INFO_SYM = {

.tag = HARDWARE_MODULE_TAG,

.version_major = 1,

.version_minor = 0,

.id = LIGHTS_HARDWARE_MODULE_ID,

.name = "QCT MSM7K lights Module",

.author = "Google, Inc.",

.methods = &lights_module_methods,

};

这就是前面通过dlsym提取出来的模块信息。其中的.methods字段就是对当前模块进行操作的函数集合。

好了。现在我们要对backlight这个设备进行操作,应该怎么办呢?

第一步,加载模块。先确定这个设备使用的模块,这里是lights。使用hardware.c中的hw_get_module把这个模块打开,并获取里面的模块信息(hw_module_t)。

第二步,打开设备。使用lights的.methods中提供的.open函数open_lights打开名字为backlight的设备,获取设备信息hw_device_t。hw_device_t里面包含了设备的属性和操作函数集合。

第三步,关闭设备。

关于这几步的代码,可以看一下这里

Android屏幕背光调整机制

http://blog.csdn.net/a345017062/archive/2011/05/14/6420239.aspx



更多相关文章

  1. Android(安卓)Studio2.0导入PullToRefresh
  2. Android插入USB设备,自动弹出提示运行apk
  3. Android(安卓)eclipse for mac redo 快捷键
  4. 在linux中配置usb连接
  5. Android设备上使用WiFinspect抓取网络通讯包
  6. android开发训练——网络操作(一)连接网络
  7. android iptables小结
  8. Android(安卓)Framework层Power键关机流程(一,Power长按键操作处理
  9. Android(安卓)- 比较版本号大小、安装apk、获取设备唯一标识、获

随机推荐

  1. 为什么我的Android(安卓)Studio没有Andro
  2. Android学习及如何利用android来赚钱
  3. Google(谷歌)宣布举办总奖金为1000万美元的
  4. android 仿ios数字密码解锁界面
  5. android 蓝牙ble app开发(二) -- 关键概念,
  6. Android中关于矩阵(Matrix)前乘后乘的一些
  7. Android构建模块
  8. 如何发布你的Android应用程序
  9. android 新浪微博客户端的表情功能的实现
  10. 开博第一日