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
那么怎么才能将驱动加入标准的那个什么中....尴尬,名字都不知道,加个毛啊
第一层次 底层驱动层,包括标准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
那么怎么才能将驱动加入标准的那个什么中....尴尬,名字都不知道,加个毛啊
相关文章推荐
- 深入Android 【二】 —— 架构和学习 推荐
- Android Sensor传感器系统架构初探
- Android开发学习之二 Android程序架构
- Android源码学习之七—传感器的背后
- Android方向传感器学习之指南针示例
- 深入Android 【二】 —— 架构和学习
- android 学习笔记(九)android底层架构9.1 Android MediaPlayer
- Android RIL 架构学习总结
- Android RIL 架构学习总结
- android学习——Android的系统架构简介
- Android源码学习之七—传感器的背后
- Android RIL 架构学习总结
- android系统架构学习
- Android源码学习之七—传感器的背后
- API Demos 2.3 学习笔记 (3)-- Android应用程序架构
- 深入Android 【二】 —— 架构和学习
- Android源码学习之七—传感器的背后
- Android RIL 架构学习总结
- Android学习1--Android系统架构
- Android平台添加外设的架构流程(kernel->HAL->JNI->API->APP)之学习提高篇