Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 592|回复: 0

[实例教程]Android中的模块(module)与设备(device)

[复制链接]

该用户从未签到

发表于 2011-10-22 12:45:40 | 显示全部楼层 |阅读模式
以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://www.apkbus.com/forum.php? ... 13116&fromuid=4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-9 07:35 , Processed in 0.373874 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表