首页>参考读物>电子电工>电子工程

Android驱动开发权威指南
作者 : 杨柳 编著
出版日期 : 2014-03-24
ISBN : 978-7-111-45182-2
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 331
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书内容分为三个部分。第一部分主要讲解Android的体系结构和主流的手机开发平台与解决方案。第二部分讲解Linux内核;第三部分结合实例讲解如何进行Andorid驱动开发。这部分内容又主要包含三部分。首先是对硬件抽象层源代码的解读;其次对开发的硬件平台进行讲解;再次结合开发板讲解实际驱动案例的开发。

图书特色

来自中国顶尖通信企业的资深工程师多年驱动开发经验的梳理
系统剖析Android底层开发,填补了底层开发书籍的空白
紧扣驱动开发的本质,一层一层向读者展现设备驱动开发的核心技术
驱动开发工程性极强,案例翔实,代码丰富,引导读者边阅读边实践

Android驱动开发权威指南
杨 柳  编著

我们知道Android最底层是基于Linux内核的,因此要基于Android开发智能手机或终端,就少不了Linux内核与底层驱动的开发。据了解,这方面的开发人员目前还很缺乏,其中一个重要的原因就是Linux是一个与Windows一样复杂的软件系统,要理解它,这本身不是一件容易的事,因此许多感兴趣的读者在翻阅相关书籍之后就知难而退了。然而,很多资深驱动工程师认为Linux内核和底层驱动的开发其实并没有想像中的那么难。大概是相关书籍首先就讲进程调度、信号同步等复杂技术,让读者立刻坠入云里雾里,特别是没弄明白设备驱动的本质,当真正讲到相关驱动开发技术时,心气已去了大半,更不用谈利用所学的知识进行实践了。
因此,本书在讲述相关的驱动开发基础知识时,先让大家初步了解Linux内核,再着手讲设备输入/输出(I/O),接着由设备I/O引入DMA与中断处理,再讲驱动的并发处理技术,最后才讲设备驱动向上层提供的同步与异步访问方法。以设备I/O本质为源,根据前后因果关系,一层一层向读者展现设备驱动开发的核心技术。只有这样,我们在编写或修改相应的Android驱动时,采用相关的技术才会得心应手,所创建的驱动才能健壮地与原有驱动和系统融为一体。而且经过这样一个学习与实践过程,相信读者对于基于Linux内核的Android会有更清楚的认识。
前:
本书根据作者多年的从业经验,从开发实战出发,全面深入地讲解了Android驱动开发。本书以Android驱动本质为源,深入浅出地剖析了Android驱动程序开发要用到的DMA、中断、同步、等待队列与signal等各项技术。本书还从系统的角度描述了Android驱动与Android其他部分的有机结合,为Android用户提供各类智能输入/输出服务。
本书适合从事Linux开发、Android底层驱动开发、系统框架开发,以及Android底层模块验证测试等的相关软件工程人员阅读;也适合从事Android智能手机其他领域的研发人员参考;还适合作为大、中专院校与培训机构的相关实践性指导教材。

杨 柳 国内某著名大型通信公司资深嵌入式系统工程师,CSDN正式会员、Google Play签约注册开发者;国家863计划某项目主要成员,该项目开发了国内第一款Linux智能手机。作者拥有丰富的Linux、Windows Phone以及Android手机研发经验。

图书前言

目前关于Android开发的书籍比较多,但大多数或立足于Android的上层,讲解如何开发Android应用,或偏重于Android Framework的繁杂机制,而缺乏讲述Android驱动及具体实践的书籍。由于工作的原因,本人正在根据多年Linux与Android驱动开发的经验,整理相关的新员工培训材料。为此,应张国强先生相邀,把相关资料整理成册,以飨读者,希望能让读者对Android有更深、更全面的理解,期待对从事Android驱动开发的工程人员的实际工作有所帮助。
  我们知道Android底层是基于Linux内核的,因此要基于Android开发智能手机或终端,就少不了Linux内核与底层驱动的开发。据了解,这方面的开发人员目前还很缺乏,其中一个重要的原因就是Linux是一个与Windows一样复杂的软件系统,要理解它,本身不是一件容易的事,因此许多感兴趣的读者在翻阅相关书籍之后就知难而退了。根据个人的工作经验,Linux内核和底层驱动的开发其实并没有想象中的那么难,大概是相关书籍首先就讲进程调度、信号同步等复杂技术,让读者立刻坠入云里雾里,特别是若没弄明白设备驱动的本质,当真正讲到相关驱动开发技术时,心气已去了大半,更不用谈利用所学的知识进行实践了。
  因此,我们在讲述相关驱动开发基础知识前,先让大家初步了解Linux内核,再着手讲设备输入/输出(I/O),接着由设备I/O引入DMA与中断处理,再讲驱动的并发处理技术,最后才讲设备驱动向上层提供的同步与异步访问方法。以设备I/O本质为源,根据前后因果,一层一层向读者展现设备驱动开发的核心技术。只有这样,我们在编写或修改相应的Android驱动时,采用相关的技术才会得心应手,所创建的驱动才能健壮地与原有驱动与系统融为一体。而且经过这样一个学习与实践过程,相信读者对于基于Linux内核的Android会有更清楚的认识。
  Android驱动开发是一门工程性很强的技术,因此本书从实际开发需要出发,同时反复强调动手实践。另外,我们认为一个合格的Android驱动程序开发工程师,除了要会编写驱动程序,向上层程序提供相应设备模块功能外,还应会编写DVT(Design Verify Test)测试程序,以验证所创建的驱动程序。因此在第三篇“Android驱动实践篇”中,除了讲解Android驱动开发原理,还讲解了Android HAL等与Android驱动紧密相关的中间层知识;在讲述具体Android设备子系统时,从该子系统整体工作机制出发,力求让读者理解开发的驱动如何成为相关子系统的有机部分,为Android驱动开发人员提供驱动开发以及DVT测试程序开发指导。
  通过本书的学习,读者将对Android整体有更深且更全面的认识。至于Android APK等程序开发的具体知识,相关的书籍与互联网上有很多资料,读者可以在进行具体DVT之类开发时,查阅相关技术的资料。
  众所周知,驱动开发是与操作系统紧密相关的,因此Android驱动开发的工作应该属于系统级工程师的任务,要求我们比Android应用等开发人员知识面更广,这一点在本人编写本书时感触特别深。站在许多前辈的肩膀上,糅合了自己的经验与理解,历时8个月,终于成稿,心中依然忐忑。Android系统可谓博大精深,加上自己才疏智浅,书中难免存在缺点与漏洞,欢迎大家提出宝贵意见,并不吝赐教。
  最后默默期许,有读者赞一声“这书对Android驱动开发还有些用”,本人则不胜感激与欣慰!当然,还要感谢张国强先生及我的家人,正是他们的支持与鼓励,才得以让我坚持并最终完成了这本书。同时,还要感谢网上不知名的“大牛们”给予的无私帮助,正是你们,让我相信中国的嵌入式驱动工程师队伍一定会强大。
本书内容安排
  本书的内容被划分为三篇,共20章。
  第一篇是Android概述篇,讲述了Android的来龙去脉、Android软件体系结构。它包含了两章内容:
  第1章Android的前世今生,讲述了Android的起源、现状与发展。
  第2章Android体系结构,讲述了Android的4层软件架构、源代码目录组织及其开发环境的搭建。
  第二篇是Linux驱动基础篇,讲述了Linux内核基础知识,以及Linux驱动开发的关键技术。它包含了11章内容:
  第3章Linux内核综述,讲述了Linux OS基本概念、进程管理、内存管理与文件系统。
  第4章Linux内核编程与内核模块,讲述了Linux内核模块模型、内核模块编程,以及Linux内核源码组织与编译。
  第5章Linux文件系统,根据Linux“一切皆文件”的核心要旨,着重讲解了文件系统,特别是与设备驱动紧密相关的设备文件系统。
  第6章Linux字符设备驱动,讲述了字符设备驱动程序结构,并实现了一个虚拟化的字符设备,最后讲解了如何通过设备文件名和设备驱动程序来访问设备。
  第7章Linux设备驱动中的内存与I/O访问,讲述了Linux设备驱动通过内存映射或分配I/O地址,实现对设备访问的基础原理。
  第8章Linux设备驱动中的中断,讲述了Linux驱动的主处理流程与中断处理异步机制,以及中断响应与定时器技术。
  第9章Linux设备驱动中的并发,讲述Linux驱动中并发访问存在的原因,以及解决并发竞争的同步访问技术。
  第10章Linux设备的阻塞式与非阻塞式访问,讲述了Linux向上层应用提供的阻塞式与非阻塞式两类同步访问设备模式,以及所要提供的相关支撑技术。
  第11章Linux设备驱动中的异步访问,讲述了Linux向上层应用提供的非同步(即异步)访问设备模式,以及Linux所要提供的相关支撑技术。
  第12章Linux块设备驱动,讲述了Linux块设备的I/O操作与字符设备的不同之处、块设备驱动结构,以及关于块设备驱动的相关支撑技术。
  第13章Linux网络设备驱动,讲述了Linux网络设备驱动架构体系、该类设备驱动结构,以及针对该类设备的I/O实现。
  第三篇是Android驱动实践篇,讲述了Android HAL等Android驱动开发专有基础知识,以及若干个实践着Linux驱动的Android功能子系统,为Android驱动开发提供具体的帮助与指导。它包含了7章内容:
  第14章Android HAL层的设计,讲述了Android HAL层工作原理,并以虚拟驱动为例,列举了针对具体驱动实现HAL层的实例。
  第15章Framebuffer子系统,讲述了Android基于Framebuffer实现显示输出的工作机理;从开发实践出发,描述了Android Framebuffer子系统中经常遇到的相关硬件和相关驱动开发;还从系统角度讲解了所开发的Framebuffer驱动如何与Android Framebuffer子系统融为一体,为Android用户提供所需的显示输出服务。
  第16章Input子系统,讲述了Android Input子系统的工作机理;从开发实践出发,以扩展键盘驱动为例,描述了Android Input子系统中相应驱动的开发;还从系统角度讲解了键盘等Input类驱动如何与Android Input子系统融为一体,为Android用户提供所需的输入服务。
  第17章V4L2子系统,讲述了Android V4L2子系统的工作机理;从开发实践出发,以OV5642 Camera驱动为例,讲述了Android V4L2子系统中相应驱动的开发;还从系统角度讲解了Camera等V4L2驱动如何与V4L2子系统融为一体,为Android用户提供拍照、录像等多媒体服务。
  第18章Binder IPC通信子系统,讲述了Android这个专有轻量级进程通信子系统的工作原理;描述了该子系统的Binder驱动底层支撑技术;还从系统的角度讲解了Binder驱动如何与Binder IPC子系统融为一体,为Android中的应用、服务等进程提供进程间通信。
  第19章USB子系统,讲述了USB协议的基础知识;描述了Android中USB底层驱动支撑技术;以USB Mass Storage为例,讲解了USB驱动如何与USB子系统融为一体,为Android用户提供USB相关服务。
  第20章Bootloader引导子系统,讲述了Bootloader的工作机理;从开发实践出发,给出了若干Bootloader的修改指导。
本书特色
  本书立足于Android驱动开发实践,从开发者角度出发,主要有以下几个特点:
  实战性强。体现在两个方面,一是本书使用了大量的代码和例子,其中有的代码和例子稍做修改就可运用到具体的Android驱动开发中;二是讲解相关技术内容时,处处站在开发者角度,整篇的编排都是根据作者多年开发经验、从实战出发合理组织的。
  循序渐进。本书内容尽量由浅入深,逐层推进,力求让稍有软件和操作系统基础的入门者也能看懂并能掌握相关的Android开发技术。
  整体把握。本书始终强调避免将Android驱动与Android的其他组件部分割裂,而是从软件工程系统的观点,确保开发的驱动能成为Android的有机组成,为Android用户提供实际的功能服务。

上架指导

嵌入式

作者简介

杨柳 编著:暂无简介

图书目录

前言
第一篇 Android的前世今生——Android概述篇
第1章 Android的前世今生  2
1.1 Android的起源  2
1.2 开放手机联盟  2
1.3 开源与相关协议  3
1.4 系统的升级与发展  3
第2章 Android体系结构  4
2.1 四层空间基本结构  4
2.1.1 Android系统底层开发  6
2.1.2 应用程序开发  7
2.2 Android代码目录结构  7
2.3 Android开发环境搭建  8
第二篇 勿于浮砂筑高台——Linux驱动基础篇
第3章 Linux 内核综述  14
3.1 OS基本概念  14
3.1.1 多用户系统  15
3.1.2 用户和组  15
3.1.3 进程  16
3.1.4 Linux单核架构  16
3.2 Linux内核综述  18
3.2.1 进程/内核模型综述  18
3.2.2 内存管理综述  26
3.2.3 文件系统综述  29
3.2.4 设备驱动简述  34
第4章 Linux内核编程与内核模块  35
4.1 Linux内核源代码目录结构  35
4.2 Linux内核的编译与启动  36
4.3 Linux内核的C编程  37
4.4 Linux内核模块基础与骨架  43
4.5 Linux模块的加载与卸载  46
4.6 Linux模块的参数与导出符号  46
4.7 Linux模块的使用计数  48
第5章 Linux文件系统  50
5.1 Linux文件系统概述  50
5.1.1 Linux文件系统的目录结构  50
5.1.2 设备驱动与Linux文件系统的关联  51
5.2 Linux设备文件系统  55
5.2.1 devfs设备文件系统  55
5.2.2 udev设备文件系统  56
5.2.3 sysfs文件系统与Linux设备  57
5.2.4 udev的组成  67
5.2.5 udev规则文件  68
第6章 Linux字符设备驱动  70
6.1 Linux字符设备驱动结构  70
6.1.1 cdev结构体  70
6.1.2 分配和释放设备号  71
6.1.3 file_operations结构体  72
6.1.4 Linux字符设备驱动的组成  74
6.2 一个字符设备驱动例子——virtualchar  77
6.2.1 头文件、宏及设备结构体  77
6.2.2 加载与卸载设备驱动  78
6.2.3 驱动函数实现  79
6.2.4 驱动设备私有数据  83
6.3 对virtualchar设备的访问  90
第7章 Linux设备驱动中的内存与I/O访问  92
7.1 CPU与内存和I/O之间的故事  92
7.1.1内存空间与I/O空间  92
7.1.2 内存管理单元MMU  93
7.2 Linux内存管理  97
7.3 Linux内存访问  99
7.4 Linux I/O访问  102
7.4.1 访问I/O  102
7.4.2 申请与释放I/O资源  105
7.4.3 I/O访问流程  107
7.4.4 设备地址与用户空间的映射  107
7.5 DMA  114
7.5.1 DMA与Cache的一致性  114
7.5.2 Linux下的DMA编程  114
第8章 Linux设备驱动中的中断  125
8.1 Linux中断及中断处理架构  125
8.2 Linux中断编程  126
8.2.1 申请和释放中断  126
8.2.2 使能与屏蔽中断  127
8.2.3 底半部机制  127
8.2.4 中断共享  130
8.3 Linux定时器  132
8.4 Linux延时处理  134
8.4.1 短延时  135
8.4.2 长延时  135
8.4.3 睡眠延时  136
第9章 Linux设备驱动中的并发  138
9.1 Linux中的并发与竞争  138
9.2 Linux中常用的同步访问技术  139
9.2.1 中断屏蔽  139
9.2.2 原子操作  140
9.2.3 自旋锁  142
9.2.4 信号量  147
9.2.5 互斥灯  152
9.3 增加并发控制的virtualchar驱动  153
第10章 Linux设备的阻塞式与非阻塞式访问  157
10.1 阻塞式与非阻塞式访问  157
10.1.1 等待队列  158
10.1.2 支持阻塞操作的virtualfifo设备驱动  162
10.2 Linux的轮询访问  167
10.2.1 应用程序中的轮询编程  167
10.2.2 设备驱动中的轮询编程  168
10.2.3 支持轮询操作的virtualfifo驱动  169
第11章 Linux设备驱动中的异步访问  171
11.1 Linux 2.6 中的异步访问  171
11.1.1 异步访问概念与GNU C库函数  171
11.1.2 使用信号作为异步访问的通知  175
11.1.3 使用回调函数作为异步访问的通知  177
11.1.4 异步访问与设备驱动  178
11.2 异步Fifo驱动例子  180
11.2.1 在virtualfifo驱动中增加异步通知  180
11.2.2 在用户空间验证virtualfifo的异步通知  182
第12章 Linux块设备驱动  184
12.1 块设备的I/O操作特点  184
12.2 Linux块设备驱动结构  184
12.2.1 block_device_operations结构体  184
12.2.2 gendisk结构体  186
12.2.3 request与bio结构体  188
12.2.4 块设备驱动注册与注销  197
12.3 Linux块设备驱动的模块加载与卸载  198
12.4 块设备的打开/释放/IOCTL  200
第13章 Linux网络设备驱动  202
13.1 Linux网络设备驱动体系结构  202
13.2 Linux网络设备驱动结构  203
13.3 Linux网络设备驱动I/O实现  204
13.3.1 网络设备初始化  204
13.3.2 网络数据包的收发  205
第三篇 实践出真知——Android驱动实践篇
第14章 Android HAL层的设计  208
14.1 Android HAL概述  208
14.2 为Android开发虚拟驱动virtualio  209
14.3 Android集成C程序访问virtualio  220
14.4 Android通过HAL访问virtualio  222
14.4.1 virtualio HAL模块实现  222
14.4.2 实现访问virtualio HAL模块JNI  226
14.4.3 在Framework层增加virtualio服务  229
第15章 Framebuffer子系统  231
15.1 Linux Framebuffer一般子系统  231
15.1.1 Framebuffer数据结构  231
15.1.2 Framebuffer驱动  237
15.2 Android Framebuffer子系统实践  238
15.2.1 硬件基础  238
15.2.2 CPU侧显示驱动模块  240
15.2.3 LCM驱动模块  242
15.3 Android系统对Framebuffer的使用  247
第16章 Input子系统  249
16.1 Linux Input一般子系统  249
16.1.1 Input数据结构  250
16.1.2 Input内核模块  252
16.2 Android Input子系统实践  257
16.2.1 硬件基础  258
16.2.2 Input驱动模块  258
16.3 Android系统对Input的使用  263
第17章 V4L2子系统  266
17.1 Linux V4L2一般子系统  266
17.1.1 V4L2数据结构  266
17.1.2 V4L2接口  268
17.1.3 V4L2虚拟驱动vivi  273
17.2 Android V4L2实践  279
17.2.1 硬件基础  280
17.2.2 CPU侧CCIC驱动模块  281
17.2.3 OV5642模组驱动模块  283
17.3 Android系统对V4L2的使用  286
第18章 Binder IPC通信子系统  288
18.1 Binder驱动概述  288
18.2 Binder通信模型  288
18.3 Binder驱动  291
18.3.1 Binder相关的结构体  292
18.3.2 Android Binder子系统的架构设计  292
18.4 Binder的工作流程  293
第19章 USB子系统  295
19.1 USB协议基础知识  295
19.1.1 USB物理连接  295
19.1.2 USB通信协议  297
19.2 USB子系统底层  299
19.2.1 USB Core  299
19.2.2 Linux USB gadget三层架构  303
19.3 Android USB子系统实践  305
19.3.1 Android IPC通信补充  305
19.3.2 Android USB Mass Storage流程分析  309
第20章 Bootloader引导子系统  312
20.1 Bootloader流程分析  312
20.1.1 Bootloader概述  312
20.1.2 U-Boot启动流程分析  314
20.2 Bootloader修改指南  317
20.2.1 开机第一帧图的修改  317
20.2.2 开机模式的定制  318
参考文献  321

教学资源推荐
作者: [美]艾伯特·马尔维诺(Albert Malvino) 戴维·贝茨(David Bates) 著
作者: 刘志远 纽春萍 编著
作者: 陈士英 郭烔杰 编著
作者: [美]托马斯·L.弗洛伊德(Thomas L. Floyd);[美] 大卫·M.布奇拉(David M. Buchla) 著
参考读物推荐
作者: 陈会 张玉兴 编著
作者: (美)Steven H. Voldman 著
作者: 王贞炎 编著
作者: (美)James Floyd Kelly  Harold Timmis 著