下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > 移动开发 >Android > Android底层接口与驱动开发技术详解

Android底层接口与驱动开发技术详解

综合评级:★★★★★

定价:89.00

作者:陈强

出版社:中国铁道出版社

出版日期:2015年1月

页数:664

字数:977

ISBN:9787113197957

书籍介绍
Android系统从诞生到现在短短的几年时间,凭借其操作易用性和开发的简洁性,赢得了广大消费用户和开发者的支持,目前一直位居智能手机操作系统市场占有率榜首的位置。本书分为三篇,共计24章,循序渐进地讲解了Android系统中底层驱动方面的知识。本书从获取源码和源码结构分析讲起,依次讲解了基础知识篇、专用驱动篇和设备驱动篇三大部分的基本知识。在讲解每一个驱动时,都从Android系统源码开始入手,遵循“内核分析—驱动实现—JNI层分析—Java应用层—系统移植和改造”这一主线,透彻地剖析了每一个驱动系统的完整实现流程。本书几乎涵盖了Android驱动方面的所有主要内容,并且全书内容言简意赅,讲解方法通俗易懂,不但适用于应用高手们,也适合初学者学习并消化。

本书定位于有一定基础的Android开发人员,帮助其细致分析Android源码和底层驱动开发,积累经验,快速向Android殿堂级高手迈进。

相关课程
目录
第1篇 基础知识篇

第 1章 Android驱动开发基础

1.1 认识什么是驱动 1

1.1.1 驱动程序的作用 1

1.1.2 PC中的驱动 2

1.1.3 手机中的驱动程序 2

1.2 开源还是不开源 2

1.2.1 雾里看花的开源 3

1.2.2 从为什么选择java谈为什么不开源驱动程序 3

1.2.3 对驱动开发者来说是一把双刃剑 4

1.3 Linux开发基础 4

1.3.1 Linux历史简介 4

1.3.2 主要版本 5

1.3.3 Linux的巨大前景 5

1.4 Android和Linux的关系 6

1.4.1 Android继承于Linux 6

1.4.2 Android和Linux内核的区别 6

1.5 简析Linux内核 8

1.5.1 Linux内核的体系结构 8

1.5.2 和Android密切相关的Linux内核知识 10

1.6 分析Linux内核源码 14

1.6.1 源码目录结构 14

1.6.2 浏览源码的工具 16

1.6.3 Linux内核的显著特性 18

1.6.4 学习Linux内核的方法 24

第 2章 获取并编译Android源码

2.1 获取Android源码 29

2.1.1 在Linux系统获取Android源码 29

2.1.2 在Windows平台获取Android源码 30

2.2 分析Android源码结构 36

2.3 编译Android源码 37

2.3.1 搭建编译环境 38

2.3.2 开始编译 39

2.3.3 在模拟器中运行 40

2.3.4 常见的错误分析 40

2.3.5 实践演练——演示两种编译Android程序的方法 41

2.4 编译Android Kernel 44

2.4.1 获取Goldfish内核代码 45

2.4.2 获取MSM内核代码 47

2.4.3 获取OMAP内核代码 47

2.4.4 编译Android的Linux内核 48

第 3章 Android驱动移植基础

3.1 驱动开发需要做的工作 50

3.2 Android移植基础 52

3.2.1 移植的任务 52

3.2.2 需要移植的内容 53

3.2.3 驱动开发需要做的工作 54

3.3 Android对Linux的改造 55

3.3.1 Android的独有驱动 55

3.3.2 Android的核心驱动 55

3.3.3 Android对Linux内核文件的改动 57

3.3.4 为Android构建 Linux的操作系统 58

3.4 内核空间和用户空间之间接口 59

3.4.1 内核空间和用户空间的相互作用 59

3.4.2 系统和硬件之间的交互 59

3.4.3 使用Relay实现内核到用户空间的数据传输 61

3.5 三类驱动程序 65

3.5.1 字符设备驱动 65

3.5.2 块设备驱动 72

3.5.3 网络设备驱动 75

第 4章 分析三大内核系统

4.1 Goldfish内核和驱动解析 77

4.1.1 Goldfish基础 78

4.1.2 Android专用驱动简介 79

4.1.3 Ashmem驱动介绍 82

4.1.4 Pmem驱动介绍 82

4.1.5 Alarm驱动程序 83

4.1.6 USB Gadget驱动程序 83

4.1.7 Paranoid驱动介绍 84

4.1.8 Goldfish的设备驱动 85

4.2 MSM内核和驱动解析 87

4.2.1 MSM基础 87

4.2.2 移植MSM内核简介 90

4.2.3 移植MSM 91

4.3 OMAP内核和驱动解析 98

4.3.1 OMAP基础 98

4.3.2 OMAP内核 100

4.3.3 移植OMAP体系结构 101

4.3.4 移植Android专用驱动和组件 108

4.3.5 OMAP的设备驱动 109

第2篇 专用驱动篇

第 5章 分析JNI

5.1 JNI的本质 114

5.2 分析Java层 116

5.2.1 加载JNI库 116

5.2.2 实现扫描工作 118

5.2.3 读取并保存信息 119

5.2.4 删除不是SD卡中的文件信息 121

5.2.5 processDirectory 121

5.2.6 扫描函数scanFile() 122

5.2.7 JNI中的异常处理 122

5.3 分析JNI层 123

5.3.1 将Native对象的指针保存到Java对象 123

5.3.2 创建Native层的MediaScanner对象 124

5.4 Native(本地)层 124

5.4.1 注册JNI函数 124

5.4.2 完成注册工作 126

5.4.3 动态注册 128

5.4.4 处理路径参数 130

5.4.5 扫描文件 130

5.4.6 添加TAG信息 131

5.4.7 总结函数JNI_OnLoad()与函数JNI_OnUnload()的用途 131

5.4.8 Java与JNI基本数据类型转换 132

5.4.9 JNIEnv接口 133

5.4.10 JNI中的环境变量 135

5.5 Camera模块的JNI实例分析 135

5.5.1 Java层预览接口 135

5.5.2 注册预览的JNI函数 137

5.5.3 C/C++层的预览函数 140

5.6 开发自己的JNI程序 140

第 6章 硬件设备驱动程序

6.1 初识HAL层 143

6.1.1 HAL层简介 144

6.1.2 HAL_legacy和HAL的对比 145

6.2 分析HAL层源码 145

6.2.1 分析HAL moudle 146

6.2.2 文件hardware.h 146

6.2.3 文件hardware.c 148

6.3 分析硬件抽象层的加载过程 151

6.4 分析硬件访问服务 153

6.4.1 定义硬件访问服务接口 153

6.4.2 实现硬件访问服务 154

6.5 分析mokoid工程 155

6.5.1 直接调用service方法的实现代码 156

6.5.2 通过Manager调用service的实现代码 160

6.6 分析Sensor(传感器)在HAL层的实现 163

6.6.1 HAL层的Sensor代码 163

6.6.2 Sensor编程的流程 165

6.7 HAL和系统移植 166

6.7.1 移植各个Android部件的方式 166

6.7.2 辅助工作 166

第 7章 Binder驱动程序

7.1 引出Binder机制 172

7.2 Binder机制概述 173

7.3 分析Binder驱动程序的数据结构 175

7.4 设备初始化 185

7.5 打开Binder设备文件 186

7.6 实现内存映射 188

7.6.1 分析流程 188

7.6.2 分析具体代码 188

7.7 释放物理页面 193

7.8 处理内核缓冲区 193

7.8.1 分配内核缓冲区函数 193

7.8.2 添加到红黑树 195

7.8.3 释放内核缓冲区 196

7.8.4 查询内核缓冲区 198

7.9 Binder封装库 198

7.9.1 类BBinder 199

7.9.2 类BpRefBase 202

7.9.3 类IPCThreadState 203

第 8章 Logger日志驱动

8.1 Logger系统基础 207

8.2 分析Logger驱动程序 207

8.2.1 分析文件logger.h 208

8.2.2 分析文件logger.c 209

8.3 日志库liblog 223

8.4 分析日志写入接口 227

8.4.1 分析C/C++层的写入接口 228

8.4.2 分析Java层的写入接口 229

第 9章 内存系统驱动

9.1 分析Android的进程通信机制 238

9.1.1 Android的进程间通信(IPC)机制Binder 238

9.1.2 Service Manager是Binder机制的上下文管理者 240

9.2 分析Ashmem驱动程序 241

9.2.1 基础数据结构 241

9.2.2 初始化处理 242

9.2.3 打开匿名共享内存设备文件 244

9.2.4 内存映射 246

9.2.5 读/写操作 247

9.2.6 锁定和解锁 249

9.2.7 回收内存块 254

9.3 分析C++访问接口层 255

9.3.1 接口MemoryBase 255

9.3.2 接口MemoryBase 264

9.4 分析Java访问接口层 267

第 10章 分析电源管理模块

10.1 Android Power Management基础 271

10.2 Framework层分析 272

10.2.1 文件PowerManager.java 272

10.2.2 文件PowerManagerService.java 273

10.3 JNI层分析 294

10.3.1 文件android_os_Power.cpp 294

10.3.2 文件power.c 295

10.4 Kernel(内核)层分析 296

10.4.1 文件power.c 296

10.4.2 文件earlysuspend.c 298

10.4.3 文件wakelock.c 299

10.4.4 文件resume.c 301

10.4.5 文件suspend.c 301

10.4.6 文件main.c 302

10.4.7 proc文件 303

10.5 wakelock和early_suspend 303

10.5.1 wake lock的原理 303

10.5.2 early_suspend的原理 304

10.5.3 Android休眠 305

10.5.4 Android唤醒 307

第 11章 分析低内存管理模块

11.1 分析OOM机制 308

11.1.1 OOM机制基础 308

11.1.2 分析OOM机制的具体实现 309

11.2 分析Low Memory Killer的原理和机制 315

11.3 分析Low Memory Killer驱动 316

11.3.1 Low Memory Killer驱动基础 316

11.3.2 分析核心功能 317

11.3.3 设置用户接口 320

第 12章 分析物理内存驱动

12.1 PMEM基础 323

12.1.1 PMEM概述 323

12.1.2 Platform设备基础 324

12.1.3 PMEM与Ashmem的区别 325

12.2 分析PMEM系统驱动程序 325

12.2.1 分析设备实现 325

12.2.2 分析驱动的具体实现 327

12.2.3 总结PMEM驱动的调用流程 350

12.3 分析用户接口空间 350

12.3.1 释放位图内存 351

12.3.2 释放位图内存空间 351

12.3.3 获取位图占用内存 352

第 13章 分析Time Device驱动

13.1 分析Timed Output驱动程序 354

13.1.1 设备类 354

13.1.2 分析Timed Output驱动的具体实现 359

13.1.3 实现timed_output_dev设备的读写操作 361

13.2 分析Timed Gpio驱动程序 362

13.2.1 Timed Gpio驱动的基本原理 363

13.2.2 分析Timed Gpio驱动的实现文件 363

第 14章 分析调试机制驱动Ram Console

14.1 Ram Console基础 368

14.2 分析Ram Console的具体实现 369

14.2.1 分析文件ram_console.h 369

14.2.2 分析文件ram_console.c 369

第 15章 分析时钟系统驱动Alarm

15.1 Alarm系统基础 379

15.1.1 Alarm层次结构介绍 379

15.1.2 需要移植的内容 381

15.2 分析RTC驱动程序 381

15.3 分析Alarm驱动程序 381

15.3.1 分析文件android_alarm.h 382

15.3.2 分析文件alarm.c 383

15.3.3 分析文件alarm-dev.c 394

15.4 分析JNI层 402

15.5 分析Java层 403

15.5.1 分析AlarmManagerService类 404

15.5.2 分析AlarmManager类 412

15.6 模拟器环境的具体实现 413

第 16章 分析USB Gadget驱动

16.1 分析Linux内核的USB驱动程序 415

16.1.1 USB设备基础 415

16.1.2 分析USB 和sysfs的联系 419

16.1.3 分析urb通信方式 422

16.1.4 分析USB驱动的例程 427

16.2 分析USB Gadget驱动 438

16.2.1 分析软件结构 438

16.2.2 层次整合 447

16.2.3 USB设备枚举 457

第3篇 设备驱动篇

第 17章 FrameBuffer显示系统驱动

17.1 显示系统介绍 473

17.2 分析内核层 474

17.2.1 分析接口文件fb.h 474

17.2.2 分析内核实现文件fbmem.c 477

17.3 分析硬件抽象层 499

17.3.1 分析头文件 500

17.3.2 分析硬件帧缓冲区 501

17.3.3 实现缓冲区的分配 503

17.3.4 显示缓冲映射 504

17.3.5 分析管理库文件LayerBuffer.cpp 505

第 18章 输入系统驱动应用

18.1 输入系统介绍 507

18.1.1 Android输入系统结构元素介绍 507

18.1.2 移植工作 509

18.2 分析Input(输入)系统驱动 509

18.2.1 分析头文件 510

18.2.2 分析核心文件input.c 513

18.2.3 分析event机制 527

18.3 分析硬件抽象层 530

18.3.1 分析文件KeycodeLabels.h 530

18.3.2 分析文件KeyCharacterMap.h 534

18.3.3 分析Kl格式文件 535

18.3.4 分析KCM格式文件 536

18.3.5 分析文件EventHub.cpp 536

第 19章 音频系统驱动

19.1 音频系统基础 541

19.2 分析音频系统的层次 542

19.2.1 层次说明 543

19.2.2 Media库中的Audio框架 543

19.2.3 本地代码 545

19.2.4 分析JNI代码 548

19.2.5 Java层代码简介 549

19.3 移植Audio系统的工作 549

19.3.1 我们的工作 549

19.3.2 分析硬件抽象层 550

19.3.3 分析AudioFlinger中的Audio硬件抽象层的实现 551

19.3.4 真正实现Audio硬件抽象层 556

19.4 在MSM平台实现Audio驱动系统 557

19.4.1 实现Audio驱动程序 557

19.4.2 实现硬件抽象层 558

第 20章 视频输出系统驱动

20.1 视频输出系统结构 562

20.2 需要移植的部分 564

20.3 分析硬件抽象层 564

20.3.1 Overlay系统硬件抽象层的接口 564

20.3.2 实现Overlay系统的硬件抽象层 566

20.3.3 实现接口 567

20.4 实现Overlay硬件抽象层 568

第 21章 振动器系统驱动

21.1 振动器系统结构 571

21.2 分析硬件抽象层 572

21.3 分析JNI层部分 574

21.4 分析Java层部分 575

21.5 实现移植工作 578

21.5.1 移植振动器驱动程序 578

21.5.2 实现硬件抽象层 579

21.6 在MSM平台实现振动器驱动 580

第 22章 传感器系统驱动

22.1 传感器系统的结构 583

22.2 分析需要移植的内容 585

22.2.1 移植驱动程序 585

22.2.2 移植硬件抽象层 586

22.2.3 实现上层部分 587

22.3 在模拟器中实现传感器驱动 591

第 23章 照相机系统

23.1 Camera系统的结构 596

23.2 分析需要移植的内容 598

23.3 移植和调试 599

23.3.1 V4L2驱动程序 599

23.3.2 硬件抽象层 605

23.4 实现Camera系统的硬件抽象层 609

23.4.1 Java程序部分 609

23.4.2 Camera的Java本地调用部分 610

23.4.3 Camera的本地库libui.so 610

23.4.4 Camera服务libcameraservice.so 611

第 24章 Wi-Fi系统、蓝牙系统和GPS系统

24.1 Wi-Fi系统 616

24.1.1 Wi-Fi系统的结构 616

24.1.2 分析需要移植的内容 618

24.1.3 分析本地实现 618

24.1.4 分析JNI层 621

24.1.5 分析Java FrameWork层 623

24.1.6 分析Setting中的Wi-Fi设置 624

24.2 蓝牙系统 625

24.2.1 蓝牙系统的结构 625

24.2.2 分析需要移植的内容 627

24.2.3 分析驱动程序 628

24.2.4 分析本地代码 628

24.2.5 在MSM平台实现蓝牙驱动系统 630

24.3 定位系统 631

24.3.1 分析定位系统的结构 631

24.3.2 分析需要移植的内容 633

24.3.3 分析驱动程序 633

24.3.4 分析硬件抽象层 633

24.3.5 分析上层应用部分 635

前言
Android是一款于2007年11月5日宣布基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。根据国际数据公司(IDC)公布的统计数据,在2013年第一季度,Android和iOS系统装机量占到所有智能手机出货量的92.3%。在2014年第一季度,安装Android系统的新智能手机数量跃升至1.621亿部,超过2013年同期的9 030万部。这意味着,在运往世界各地的所有新智能手机中,移动操作系统Android的市场占有率已经达到75%,比2012年第一季度的59.1%有显著提高。75%,这是一个具有突出性优势的比重,足以令后面的追赶者汗颜。我们有理由相信,在未来一段时间内,Android依旧牢牢地占据着智能手机操作系统第一的宝座。

市场需求分析

强大的市场占有率造就了更多开发人员关注于这款神奇的系统,同时Android系统的应用者对该系统的功能需求也与日俱增,这也说明应用市场正在渴求着更多的Android开发高手,因此更多稍有基础的Android开发人员需要不断掌握更多的Android关键技术,提升开发功能。

可以说底层驱动开发是通往Android殿堂级高手的必经之路!为了让广大初学者可以对Android系统实现“灵与肉”的感知,而不是停留在原始、抽象的原理和概念之上,本书对Android系统中的底层驱动方面的知识进行了细致的分析,这样做的目的是“提炼”出Android系统埋藏在深处的本质,了解这款神奇的系统究竟是怎样诞生的。并依此为基础,详细讲解了系统移植和驱动开发的基本原理和具体实现。相信阅读完本书,经“细嚼慢咽”并消化之后,您一定会成为殿堂级的Android高手。

本书的内容

本书内容分为三篇,共计24章,循序渐进地讲解了Android系统中底层驱动方面的知识。本书从获取源码和源码结构分析讲起,依次讲解了Android驱动开发基础,获取并编译Android源码,Android驱动移植基础,分析三大内核系统,分析JNI,硬件设备驱动程序,Binder驱动程序,Logger日志驱动,内存系统驱动,分析电源管理模块,分析低内存管理模块,分析物理内存驱动,分析Time Device驱动,分析调试机制驱动Ram Console,分析时钟系统驱动Alarm,分析USB Gadget驱动,FrameBuffer显示系统驱动,输入系统驱动应用,音频系统驱动,视频输出系统驱动,振动器系统驱动,传感器系统驱动,照相机系统,Wi-Fi系统、蓝牙系统和GPS系统等高级知识。本书几乎涵盖了Android源码中的所有主要内容,并且全书内容言简意赅,讲解方法通俗易懂,不但适用于应用高手们,也适合初学者学习并消化。

本书的版本

Android系统自2008年9月发布第一个版本1.1以来,截至2014年6月发布新版本Preview L,一共存在十多个版本。由此可见,Android系统升级频率较快,一年中最少有两个新版本诞生。如果过于追求新版本,就会造成力不从心的结果。在此建议广大读者,不必追求最新的版本,我们只需关注最流行的版本即可。据官方统计,截至2014年3月25日,占据前三位的版本分别是Android 4.3,Android 4.4和Android 4.2,其实这三个版本的区别并不是很大,只是在某个领域的细节上进行了更新。因此,在本书中使用的版本是Android 4.4。

对于Android 4.4来说,对应的Linux内核是3.10,本书将以Linux 3.10和Android 4.4为对象,详细分析Android平台中驱动系统的实现和移植。

本书特色

本书内容丰富全面,分析细致。我们的目标是通过一本图书,提供多本图书的价值,读者可以根据自己的需要有选择地进行阅读。在内容的编写上,本书具有以下特色。

(1)结构合理

从用户的实际需要出发,科学安排知识结构,内容由浅入深,叙述清楚。全书详细地讲解了和Android应用开发有关的源码,内容循序渐进,由浅入深。

(2)遵循“内核分析—驱动实现—JNI层分析—Java应用层—系统移植”这一主线

为了使广大读者彻底弄清楚Android平台中的各个驱动系统,在讲解每一个驱动系统时,都从Linux内核开始讲起,依次剖析了驱动层实现、JNI层分析、Java应用和系统移植改造等内容。遵循了从底层到顶层,实现了驱动系统大揭秘的目标。

(3)易学易懂

本书内容条理清晰、语言简洁,可以帮助读者快速掌握每个知识点。使读者既可以按照本书编排的章节顺序进行学习,也可以根据自己的需求对某一章节进行有针对性的学习。和传统难懂的计算机书籍相比,阅读本书会带来很大的乐趣。

(4)实用性强

本书彻底摒弃枯燥的理论和简单的操作,注重实用性和可操作性,通过简洁的语言和细腻的笔法,详细讲解了各个知识点的基本知识。

(5)内容全面

本书可以号称“内容非常全面的一本Android驱动开发书”,无论是获取源码,还是各个常用、常见的驱动系统,您都能在本书中找到解决问题的答案。

读者对象

? 初学Android编程的自学者;

? Linux开发人员;

? 大中专院校的老师和学生;

? 毕业设计的学生;

? Android编程爱好者;

? 相关培训机构的老师和学员;

? 从事Android开发的程序员。

本团队在编写过程中,得到了中国铁道出版社工作人员的大力支持,特别是荆波编辑的大力支持。正是各位编辑的求实、耐心和高效,才能使得本书在这么短的时间内出版。另外,也十分感谢我的家人,在我写作的时候给予的巨大支持。由于本团队水平有限,如有纰漏和不尽如人意之处在所难免,诚请读者提出意见或建议,以便修订并使之更加完善。

热门图书
推荐新闻
技术文库
论坛推荐