一、实现的功能
以DHT11温湿度传感器为例,实现一个简单的Android硬件访问服务。实现的功能是:通过编写Android APP来读取温湿度的数值并将它们显示出来。
二、基本的开发环境
PC端 :
操作系统 Ubuntu12.04
交叉编译工具版本 gcc version 4.5.1
开发板:
友善之臂 Tiny4412(Cortex-A9)
操作系统 Android-5.0.2
内核版本 Linux-3.0.86
三、基本的开发流程
通过对上图进行分析,可以看出,编写一个Android硬件访问服务所涉及的基本的层级结构:
Dht11 driver 层 :Android系统是基于Linux开发出来的,所以在很多时候Android驱动程序的开发就等于Linux驱动程序的开发(有一些是针对Android平台开发的特定驱动,如Binder、Ashmem等),这部分的实现可以参考这篇博文:http://blog.csdn.net/tech_pro/article/details/70231235,这里就不再进行赘述。
HAL 层 :HAL的全称是Hardware Abstract Layer,即硬件抽象层。它是用C/C++编写而成,从上图也可以看出,它的主要功能是向下访问驱动程序来驱动硬件,向上提供访问接口,起到承上启下的作用。
JNI 层 : JNI的全称是Java Native Interface,即Java本地化访问接口,我们知道Android系统的上层是用Java语言来编写的,Android APP也几乎都是用Java语言编写的,但Android系统底层为了实现对硬件的访问和提高系统的性能,几乎都是用C/C++来编写的。这样就引出了一个问题,用Java语言编写的程序如何和用C/C++编写的程序之间实现相互调用呢,而JNI就是用来实现这样的功能,关于JNI的具体介绍请参看相关的数据或者文章。
Service Layer :系统服务层,Android系统的核心就是服务,服务又分为应用服务和系统服务两大类,系统服务又分为本地系统服务和Java系统服务。本文所讲的服务属于系统服务,实现的功能较为简单。Android系统为了更好的实现对硬件资源的管理,所以对硬件的操作也放在了Android的系统服务中来实现。
Application : Android的应用程序,通过编写Android应用程序来访问硬件系统服务并最终驱动硬件。
从上面分析可以看出,构建一个简单的Android硬件服务所涉及的基本步骤:编写硬件驱动、HAL、JNI、Service、Android APP。本文采用自顶向下的开发方式,先实现Service层,再实现JNI和HAL层,驱动层已经完成,不需要额外实现,最后来编写一个Android应用程序进行测试。具体实现,请参考后续博文。