Android驱动开发
2015-12-09 13:38
295 查看
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层。
应用程序要和硬件设备打交道,例如控制硬件设备的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层。
相关文章推荐
- Linux socket 初步
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置