表2 根目录结构
3。 Android传感器模块的分析
3。1 Android传感器系统概述
Android在对传感器系统进行应用时,涉及到了所有层面的共同作用。传感器系统的JNI、传感器的Java类、系统硬件以及在内核中的驱动程序构成了传感器系统的核心部分,而Java框架的使用和应用程序的使用组建起来传感器的外部使用结构,两部分共同组成了传感器系统[7]。
Android系统所支持的大部分传感器已经在Android框架中大量使用,常用的传感器类型以及所支持的本地接口,如表3所示。然而还有大部分的传感器需要在应用程序中使用,例如在使用地图时会给为使用者标记出目前所处位置和方向,在长时间开启手机屏幕的时候会根据环境的亮度自动调节背光亮度。
表3 传感器类型
3。2 传感器驱动程序设计
本文所涉及到的是一个光线和距离二合一传感器AL3003,它的驱动程序的总体架构以及硬件抽象层有以下特点[8]:
(1) 它的内置寄存器,可以通过串行、顺序结构进行访问。因此,它属于字符设备。
(2) 可以将它看作一个输入设备,它所输出的信号来自于器件本身产生的,这样就可以把驱动程序添加到Linux input子系统中去,从而直接向上层提供数据。
(3) 它提供给上层的数据是由外界环境光照值转换而来的,可以在硬件抽象层对它进行数据转化。
(4) 它拥有I2C接口,因此基于I2C总线协议就可以通过I2C设备驱动的开发方式为它开发I2C驱动。
在设计Android系统中的硬件驱动时,需要考虑到设备的性能、类型、功能、通讯方式和与其他设备的相互作用等,根据以上的考虑和功能集中的原则,本文对驱动程序模块方面有了如下划分,如图4所示。
图4 功能模块划分
在这些模块中,数据通信由I2C设备驱动负责,需要应用I2C总线协议规范的相关知识,利用I2C程序设计方法进行驱动实现[9]。完成驱动后,利用通信功能对寄存器进行控制,使其向上层输出我们所需要的数据。
为了使应用程序能利用I2C驱动程序对传感器进行控制,可以将传感器注册成字符设备,从而捕获传感器所感知的数据,并将其提供给上层,为满足上述要求,需要open、ioctl等操作接口。为了与硬件抽象层接轨,从而给传感器创建属性组,可以使用sysfs文件系统的管理功能。它作为文件管理系统存在于Linux内核中,可以管理Linux内部全部的设备。而将传感器作为一个输入设备看待时,它所处的目录便是在/sys/class/inpot/下面,而sysfs文件系统在Linux内核规定中明确标注它必须挂在/sys目录中,因此可以使用sysfs文件管理系统来管控传感器,使用户能直接控制设备的各种属性接口[10]。文献综述
Sysfs文件系统在实现管理传感器的时候利用传感器配置核心功能这一模块来实现对传感器的一部分核心功能的配置。从而使传感器可以处于我们期望的状态,最显著的效果就是对电源模式的切换和对传感器工作模式的控制。
而利用输入子系统上报数据这一模块来实现对数据的传输和上报。采用这一模块是将传感器看作输入设备,利用了子系统的输入事件来生成相应的报告数据,从而达到数据的传输和上报的目的,而这一方式也可以作为硬件抽象层来获取驱动程序上报的途径。
3。3 AL3003的功能模块组成
AL3003主要由几个模块组成,其中包含光线感应模块 (DLS)负责感知环境光线强度,并将其转换成电子信号。距离感应模块 (DPS)负责将感知物体接近的距离,当距离小于最小阈值时输出电子信号。数位转换模块负责将光线感应模块和距离感应模块所输出的电子信号转换为数字信号。还有控制产生时钟信号的振荡器模块、负责逻辑控制功能的逻辑模块和I2C接口模块等[11]。AL3003的结构如图5所示。 AL3003光控安卓手机解锁软件设计(4):http://www.youerw.com/jisuanji/lunwen_99984.html