预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在智能手机时代,每个品牌的手机都有自己的个性特点。正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了。HYPERLINK"http://www.ifanr.com/39850"据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而AndroidMarket的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore。随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与。HYPERLINK"http://tech.ifeng.com/internet/detail_2011_06/13/6971800_0.shtml"据业内统计,Android研发人才缺口至少30万。目前,对Android人才需求一类是偏向硬件驱动的Android人才需求,一类是偏向软件应用的Android人才需求。总的来说,对有志于从事Android硬件驱动的开发工程师来说,现在是一个大展拳脚的机会。那么,就让我们一起来看看如何为Android系统编写内核驱动程序吧。 这里,我们不会为真实的硬件设备编写内核驱动程序。为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写。想起我们第一次学习程序语言时,都喜欢用“Hello,World”作为例子,这里,我们就把这个虚拟的设备命名为“hello”,而这个内核驱动程序也命名为hello驱动程序。其实,Android内核驱动程序和一般Linux内核驱动程序的编写方法是一样的,都是以Linux模块的形式实现的,具体可参考前面HYPERLINK"http://blog.csdn.net/Luoshengyang/archive/2011/06/21/6557518.aspx"Android学习启动篇一文中提到的LinuxDeviceDrivers一书。不过,这里我们还是从Android系统的角度来描述Android内核驱动程序的编写和编译过程。 一.参照前面两篇文章HYPERLINK"http://blog.csdn.net/Luoshengyang/archive/2011/06/21/6559955.aspx"在Ubuntu上下载、编译和安装Android最新源代码和HYPERLINK"http://blog.csdn.net/Luoshengyang/archive/2011/06/23/6564592.aspx"在Ubuntu上下载、编译和安装Android最新内核源代码(LinuxKernel)准备好Android内核驱动程序开发环境。 二.进入到kernel/common/drivers目录,新建hello目录: USER-NAME@MACHINE-NAME:~/Android$cdkernel/common/drivers USER-NAME@MACHINE-NAME:~/Android/kernel/common/drivers$mkdirhello 三.在hello目录中增加hello.h文件: HYPERLINK"http://blog.csdn.net/Luoshengyang/article/details/6568411"\l"#"\o"viewplain"viewplainHYPERLINK"http://blog.csdn.net/Luoshengyang/article/details/6568411"\l"#"\o"copytoclipboard"copytoclipboardHYPERLINK"http://blog.csdn.net/Luoshengyang/article/details/6568411"\l"#"\o"print"printHYPERLINK"http://blog.csdn.net/Luoshengyang/article/details/6568411"\l"#"\o"?"? #ifndef_HELLO_ANDROID_H_ #define_HELLO_ANDROID_H_ #include<linux/cdev.h> #include<linux/semaphore.h> #defineHELLO_DEVICE_NODE_NAME"hello" #defineHELLO_DEVICE_FILE_NAME"hello" #defineHELLO_DEVICE_PROC_NAME"hello" #defineHELLO_DEVICE_CLASS_NAME"hello" structhello_