Android驱动开发

来源:互联网 发布:史记的地位 知乎 编辑:程序博客网 时间:2024/04/30 19:01
Android是基于Linux的操作系统,底层是Linux内核层(Linux2.6, Linux3.4等),android使用了Linux操作系统的内核和驱动,其中驱动部分除了Linux的设备驱动,android还增加了专用驱动(例如Binder实现进程间通信)。
应用程序要和硬件设备打交道,例如控制硬件设备的LED灯,要经过几个系统架构层:Framework层、JNI层、HAL层、内核驱动层,才能控制到LED灯。

Android系统的架构层(摘自网络图片)如下:


从下到上各层依次是:
1. Linux内核层:Linux内核和驱动模块。Linux的设备驱动有3类,字符设备驱动、块设备驱动、网络接口驱动。Android系统增加了专用驱动,该部分和硬件设备无关是纯软件的东西,如Ashmem(匿名共享内存),Logger(日志驱动),Binder(基于 OpenBinder 框架的一个驱动)。所以android底层的Linux操作系统和标准Linux有一点小差异,但是在设备驱动实现方面和标准Linux一样。
主要驱动罗列如下:
     1)设备驱动:
      Frame Buffer:帧缓冲,实现显示驱动
      Event:输入设备驱动;
      内存驱动:基于MTD;
      ALSA(Advanced Linux Sound Architecture):音频驱动;
      V412摄像头:视频驱动;
      蓝牙设备驱动;
      WiFi设备驱动。
     2)专有驱动:
      Ashmem:匿名共享内存;
      Logger:日志驱动;
      Binder:进程间通信驱动;
      Power Management:电源管理模块;
      Low Memory Killer:低内存管理器。

2. HAL层:硬件抽象层,将Android Framework和内核隔离,Android Framework的开发可以不用考虑太多内核驱动程序。HAL没有开源,HAL层的存在主要是google为了保护硬件厂商的驱动程序,不用开源而保密硬件规格。
3. Libraries和Runtime层:这层是Native层,提供动态库、android runtime运行环境、Dalvik虚拟机等,大部分是C/C++实现。

4. Framework层:Application层的框架,大部分是Java代码。为应用程序提供API,例如UI程序需要的各种控件,和组件。

5. Application层:Java开发的应用程序,主要是用户界面,实现人机交互,还可以使用Framework层的API。


网上关于android系统开发的经典博文较多,大多是在模拟器环境下测试驱动开发,接下来写几篇文章记录一下在全志cubieboard开发板上测试的应用程序控制硬件设备的过程,以备忘和分享测试方法。
目录:
一、Android驱动开发-- 1.内核driver层
二、Android驱动开发-- 2.测试驱动程序
三、Android驱动开发-- 3.HAL层
四、Android驱动开发-- 4.JNI层
五、Android驱动开发-- 5.应用层

接下来,开始第一节:Android驱动开发-- 1.内核driver层。


1 0