您的位置:首页 > 运维架构 > 网站架构

android传感器架构学习

2017-04-27 10:57 267 查看
1. Android的体系结构可分为4个层次。



第一层次  底层驱动层,包括标准Linux,Android核心驱动,Android相关设备驱动,G-sensor的设备驱动程序即存在于此
第二层次 Android标准C/C++库,包括硬件抽象层,Android各底层库,本地库,JNI
第三层次 Android Java Framwork框架层
第四层次 Java应用程序
1.1硬件抽象层
硬件抽象层通过例如open(), read(), write(), ioctl(), poll()等函数调用的方式,与底层设备驱动程序进行交互,而这些函数调用是底层设备驱动程序事先准备好的。

硬件抽象层通过描述符fd(fd有open()打开G-sensor设备节点得到,即fd = open ("/dev/bma220", O_RDONLY);而/dev/bma220这个设备节点是在底层设备驱动中注册完成的。)和底层交互。

1.2JNI层(Java Native
Interface)

JNI完成从C++语言到Java语言的转换。JNI层为Java
Framework层提供一系列接口,而这些接口函数的具体实现中,利用例如module-

>methods->open(), sSensorDevice->data_open(), sSensorDevice->poll()等回调函数与硬件抽象层进行交互。而这些open(), poll()回调函数在硬件抽象层中具体实现。

另外android使用了linux内核,但是用JNI 层规避了GPL协议,就不必开源。

1.3 Java Framework

framework层提供各种类和对象,可以被上层(app)调用,例如我们常使用到的SensorManager,它作为系统的守护进程在初始化的时候开始运行,其子类SensorThread中的子类SensorThreadRunnable通过sensors_data_poll()实现了对G-sensor数据的轮训访问,而sensors_data_poll()通过JNI层转换到硬件抽象层去具体实现poll()。

怎么才
9d24
能把自己的驱动加入系统供上层调用?

找到一篇老罗的完整例程:(但是不是标准的,例如传感器,按照这个方法,我们只能使用服务,不能使用标准的sensormanager类来调用这个传感器)

具体步骤:

1.在Ubuntu上为Android系统编写Linux内核驱动程序

网址:http://blog.csdn.net/luoshengyang/article/details/6568411

2.在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序

网址:http://blog.csdn.net/luoshengyang/article/details/6571210

3.在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序

网址:http://blog.csdn.net/luoshengyang/article/details/6573809
4.为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
网址:http://blog.csdn.net/luoshengyang/article/details/6575988
5.在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
网址:http://blog.csdn.net/luoshengyang/article/details/6578352
6.为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
网址:http://blog.csdn.net/luoshengyang/article/details/6580267

那么怎么才能将驱动加入标准的那个什么中....尴尬,名字都不知道,加个毛啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: