Android平台下驱动的开发及简单测试程序的编写
/****************************************************************************************************************
*1:主要简述android平台下驱动的开发与测试步骤,涵盖安卓系统四层框架
*2:主要参考老罗的博客《Android硬件抽象层(HAL)概要介绍和学习计划》系列文章
* 原博文地址
* http://blog.youkuaiyun.com/luoshengyang/article/details/6567257
*3: 其次参考老罗《Android系统源代码情景分析》一书,参考代码也来自此书
****************************************************************************************************************/
本章主要介绍Android系统的最底层--Linux设备驱动层,以及编写一个简单的测试程序检测驱动是否达到目的。在此之前,先了解下Android整个框架结构图:

Android可分为四层,从上到下可分为应用层、应用架构层、系统运行库层以及Linux内核层。
Linux内核层:Android的核心系统服务基于Linux内核,如安全性、内存管理、进程管理、网络协议栈、和驱动模型等都是依赖linux内核。
系统运行库层:当使用Android应用框架的时,Android系统通过一些C/C++库来支持我们使用各种组件,使其能更好的为我们服务。
应用程序框架层:这一层即是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则。
Android应用程序层:所有的应用程序都是使用java语言编写的,通过调用应用程序框架层(Application Framework)所提供的API来完成。
1: 开发Android硬件驱动程序
为方便描述,我们将为一个虚拟的字符设备开发驱动程序。这个虚拟的字符硬件设备只有一个寄存器,它的大小的为四字节,可读可写。由于这个字符设备是虚拟的,且只有一个寄存器,因此我们称之为“Fake Register”,对应驱动名为freg.在Android系统中开发硬件驱动程序的方法与一般的Linux系统是一样的,所以这里不再详细叙述。
1.1: 实现内核驱动模块
我的开发环境为Ubuntu10.04,源代码为MTK 6589平台release源码包,android系统为4.2,linux3.4.5内核版本。驱动程序freg目录如下:
~/alps/kernel/drivers
-----char
----freg.c
----makefile
这里为了简化和平台考虑,只用了上面两个源文件。下面首先看下freg.c:
Freg.c
*1:主要简述android平台下驱动的开发与测试步骤,涵盖安卓系统四层框架
*2:主要参考老罗的博客《Android硬件抽象层(HAL)概要介绍和学习计划》系列文章
* 原博文地址
* http://blog.youkuaiyun.com/luoshengyang/article/details/6567257
*3: 其次参考老罗《Android系统源代码情景分析》一书,参考代码也来自此书
****************************************************************************************************************/
本章主要介绍Android系统的最底层--Linux设备驱动层,以及编写一个简单的测试程序检测驱动是否达到目的。在此之前,先了解下Android整个框架结构图:
Android可分为四层,从上到下可分为应用层、应用架构层、系统运行库层以及Linux内核层。
Linux内核层:Android的核心系统服务基于Linux内核,如安全性、内存管理、进程管理、网络协议栈、和驱动模型等都是依赖linux内核。
系统运行库层:当使用Android应用框架的时,Android系统通过一些C/C++库来支持我们使用各种组件,使其能更好的为我们服务。
应用程序框架层:这一层即是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则。
Android应用程序层:所有的应用程序都是使用java语言编写的,通过调用应用程序框架层(Application Framework)所提供的API来完成。
1: 开发Android硬件驱动程序
为方便描述,我们将为一个虚拟的字符设备开发驱动程序。这个虚拟的字符硬件设备只有一个寄存器,它的大小的为四字节,可读可写。由于这个字符设备是虚拟的,且只有一个寄存器,因此我们称之为“Fake Register”,对应驱动名为freg.在Android系统中开发硬件驱动程序的方法与一般的Linux系统是一样的,所以这里不再详细叙述。
1.1: 实现内核驱动模块
我的开发环境为Ubuntu10.04,源代码为MTK 6589平台release源码包,android系统为4.2,linux3.4.5内核版本。驱动程序freg目录如下:
~/alps/kernel/drivers
-----char
----freg.c
----makefile
这里为了简化和平台考虑,只用了上面两个源文件。下面首先看下freg.c:
Freg.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h&g