第1章 迅猛发展的Android系统 1
1.1 智能手机世界 1
1.1.1 何谓智能手机 1
1.1.2 当前主流智能手机系统 1
1.2 Android的自身优势 3
1.2.1 开源 3
1.2.2 强大的开发团队支持 3
1.2.3 实行奖励机制 4
1.3 认识驱动 4
1.4 分析Android架构 5
1.4.1 操作系统层(OS) 5
1.4.2 各种库和Android运行环境 6
1.4.3 应用程序 7
1.4.4 应用程序框架 7
1.5 开源的问题 8
1.5.1 雾里看花的开源 8
1.5.2 从选择Java开始谈为什么不开源驱动程序 8
1.5.3 对驱动开发者的影响 9
第2章 简要分析Linux内核 10
2.1 Linux基础 10
2.1.1 Linux历史简介 10
2.1.2 主要版本 10
2.1.3 Linux的发展机遇 11
2.2 Android和Linux的关系 11
2.2.1 Android继承于Linux 12
2.2.2 Android和Linux内核的区别 12
2.3 Linux内核简介 14
2.3.1 内核的体系结构 14
2.3.2 和Android相关的Linux内核知识 17
2.4 分析Linux内核源码 20
2.4.1 源码目录结构 21
2.4.2 浏览源码的工具 23
2.4.3 用汇编语言编写内核代码 24
2.4.4 Linux内核的显著特性 24
2.4.5 学习Linux内核的过程 32
第3章 开始分析Android源码 37
3.1 搭建Linux开发环境和工具 37
3.1.1 搭建Linux开发环境 37
3.1.2 设置环境变量 38
3.1.3 安装编译工具 38
3.2 获取Android源码 39
3.3 分析Android源码结构 41
3.4 编译Android源码 46
3.5 运行Android源码 48
3.6 实践演练——演示两种编译Android程序的方法 49
3.6.1 编译NativeC的helloworld模块 49
3.6.2 手工编译C模块 50
3.7 编译Android Kernel 53
3.7.1 获取Goldfish内核代码 53
3.7.2 获取MSM内核代码 56
3.7.3 获取OMAP内核代码 56
3.7.4 编译Android的Linux内核 56
3.8 运行模拟器 58
3.8.1 Linux环境下运行模拟器的方法 58
3.8.2 模拟器辅助工具——ADB 59
第4章 驱动移植 62
4.1 Android移植 62
4.1.1 移植的任务 62
4.1.2 移植的内容 62
4.1.3 驱动开发需要做的工作 63
4.2 Android对Linux的改造 64
4.2.1 Android的核心驱动 64
4.2.2 为Android构建Linux操作系统 67
4.3 内核空间和用户空间接口 68
4.3.1 实现系统和硬件之间的交互 68
4.3.2 实现内核到用户空间的数据传输 70
4.4 三类驱动程序 74
4.4.1 字符设备驱动 74
4.4.2 块设备驱动 82
4.4.3 网络设备驱动 86
第5章 深入详解HAL层 87
5.1 初识HAL层 87
5.1.1 HAL层简介 87
5.1.2 比较HAL_legacy和HAL 89
5.2 分析HAL层源码 89
5.2.1 分析HAL module 89
5.2.2 分析mokoid工程 92
5.3 Sensor在HAL层的表现 101
5.3.1 HAL层的Sensor代码 101
5.3.2 总结Sensor编程的流程 103
5.4 移植总结 104
5.4.1 移植各个Android部件的方式 104
5.4.2 辅助工作 105
第6章 常见的驱动平台 112
6.1 专用驱动 112
6.1.1 Binder驱动程序 112
6.1.2 Logger驱动 122
6.1.3 组件Lowmemorykiller 123
6.1.4 Timed Output驱动程序 123
6.1.5 Timed Gpio驱动程序 125
6.1.6 唤醒和休眠 126
6.1.7 Ashmem驱动程序 130
6.1.8 Pmem驱动程序 133
6.1.9 Alarm驱动程序 134
6.1.10 USB Gadget驱动程序 136
6.1.11 Android Paranoid驱动程序 137
6.2 Goldfish设备驱动 138
6.3 MSM内核和驱动 146
6.3.1 MSM基础 146
6.3.2 移植MSM内核 148
6.3.3 移植MSM 150
6.3.4 高通特有的组件 156
6.4 OMAP内核和驱动 157
6.4.1 OMAP基础 157
6.4.2 OMAP内核 159
6.4.3 移植OMAP体系结构 161
6.4.4 移植Android专用驱动和组件 168
6.4.5 OMAP的设备驱动 169
第7章 输入系统驱动 175
7.1 输入系统介绍 175
7.1.1 Android输入系统结构元素介绍 175
7.1.2 Android输入系统驱动 176
7.1.3 Input系统的层次结构 177
7.1.4 移植工作 177
7.2 Input驱动源码分析 178
7.2.1 文件input.h 178
7.2.2 文件KeycodeLabels.h 182
7.2.3 文件KeyCharacterMap.h 186
7.2.4 Kl格式文件 187
7.2.5 kcm格式文件 188
7.2.6 文件EventHub.cpp 188
7.3 Input设备的运作过程 191
7.3.1 Input设备的注册(硬件驱动层) 192
7.3.2 Input子系统的加载过程(子系统核心层) 192
7.3.3 Input子系统的事件处理(事件处理层) 194
7.4 模拟器的输入驱动 198
7.5 高通平台的输入驱动实现 199
7.5.1 触摸屏驱动 199
7.5.2 按键和轨迹球驱动 205
7.6 OMAP处理器中的输入驱动实现 208
7.6.1 触摸屏驱动程序 208
7.6.2 键盘驱动程序 208
第8章 电话系统驱动 210
8.1 电话系统基础 210
8.1.1 Android电话系统简介 210
8.1.2 深入分析电话系统的实现文件 211
8.1.3 电话系统结构 212
8.2 移植Modem驱动和RIL硬件抽象层 213
8.3 移植和调试 214
8.3.1 驱动程序 214
8.3.2 RIL接口 216
8.4 实现电话系统驱动 219
8.4.1 RIL中消息队列的建立 219
8.4.2 与底层Modem通信 224
8.5 深入分析实现Android电话系统的流程 229
8.5.1 初始启动流程 229
8.5.2 接收信息流程 231
8.5.3 等待硬件响应 233
第9章 显示系统驱动 236
9.1 显示系统基础 236
9.1.1 Android的版本 236
9.1.2 不同的显示系统 237
9.1.3 FrameBuffer驱动的使用基础 237
9.2 移植Android显示系统 238
9.2.1 FrameBuffer驱动程序 238
9.2.2 硬件抽象层 242
9.3 实现显示系统的驱动程序 254
9.3.1 Goldfish中的FrameBuffer驱动程序 254
9.3.2 使用Gralloc模块的驱动程序 257
9.4 MSM中显示驱动的实现 266
9.4.1 MSM中的FrameBuffer驱动程序 267
9.4.2 MSM中的Gralloc驱动程序 269
9.5 OMAP中显示驱动的实现 276
9.5.1 文件omapfb-main.c 276
9.5.2 文件omapfb.h 278
9.6 6416中FrameBuffer的工作原理 279
第10章 音频系统驱动 286
10.1 音频系统结构 286
10.2 音频系统的层次 287
10.2.1 层次说明 287
10.2.2 Media库中的Audio框架 288
10.2.3 本地代码 291
10.2.4 JNI代码 294
10.2.5 Java代码 295
10.3 移植工作 296
10.3.1 两个任务 296
10.3.2 Audio的硬件抽象层 296
10.3.3 实现AudioFlinger中的Audio硬件抽象层 298
10.3.4 真正实现Audio硬件抽象层 304
10.4 MSM平台实现Audio驱动系统 304
10.4.1 实现Audio驱动程序 304
10.4.2 实现硬件抽象层 305
10.5 OSS平台实现Audio驱动系统 309
10.5.1 OSS驱动程序介绍 309
10.5.2 mixer 310
10.6 ALSA平台实现Audio系统 317
10.6.1 ALSA基础 317
10.6.2 注册音频设备和音频驱动 318
10.6.3 ALSA的底层接口 318
10.6.4 放音流程 320
10.6.5 录音流程 325
10.6.6 在Android中使用ALSA声卡 328
10.6.7 在OMAP平台移植Android的ALSA声卡驱动 337
10.7 6410中的ALSA驱动 340
10.7.1 ALSA的设备文件 340
10.7.2 创建声卡和PCM设备 341
第11章 视频输出系统驱动 344
11.1 视频输出系统结构 344
11.2 移植的内容 346
11.3 分析硬件抽象层 346
11.3.1 Overlay系统硬件抽象层的接口 346
11.3.2 实现硬件抽象层 349
11.3.3 实现接口 350
11.4 实现Overlay硬件抽象层 351
11.5 在OMAP平台实现Overlay系统 353
11.5.1 实现输出视频驱动程序 353
11.5.2 实现Overlay硬件抽象层 354
11.6 系统层调用Overlay模块 360
11.6.1 测试文件 360
11.6.2 在Android系统中创建Overlay 361
11.6.3 管理Overlay HAL模块 363
11.7 抽象层实现(V412驱动实现方式) 364
第12章 振动器系统驱动 369
12.1 振动器系统结构 369
12.1.1 硬件抽象层 371
12.1.2 JNI框架部分 372
12.2 开始移植 373
12.2.1 移植振动器驱动程序 373
12.2.2 实现硬件抽象层 374
12.3 在MSM平台实现振动器驱动 375
第13章 Android多媒体插件框架 379
13.1 Android多媒体插件 379
13.2 需要移植的内容 380
13.3 OpenCore引擎详解 381
13.3.1 OpenCore的层次结构 381
13.3.2 OpenCore的代码结构 382
13.3.3 OpenCore的编译结构 383
13.3.4 OpenCore OSCL 387
13.3.5 实现OpenCore中的OpenMax部分 389
13.3.6 OpenCore的扩展 401
13.4 Stagefright引擎 408
13.4.1 代码结构 408
13.4.2 实现OpenMax接口 408
13.4.3 Video Buffer传输流程 412
第14章 Camera照相机驱动 418
14.1 Camera系统的结构 418
14.2 移植的内容 421
14.2.1 fimc驱动模块的加载 421
14.2.2 V412驱动的用法 425
14.3 移植和调试 426
14.3.1 V4L2驱动程序 426
14.3.2 硬件抽象层 434
14.4 实现Camera系统的硬件抽象层 438
14.4.1 Java程序部分 438
14.4.2 Java本地调用部分 439
14.4.3 本地库libui.so 440
14.4.4 Camera服务libcameraservice.so 441
14.5 实现Camera系统 445
14.5.1 在MSM平台实现Camera系统 445
14.5.2 OMAP平台实现Camera系统 448
14.6 借助Sensor驱动使用照相机系统 449
第15章 传感器系统驱动 452
15.1 传感器系统的结构 452
15.2 移植Sensor驱动 454
15.2.1 移植驱动程序 454
15.2.2 移植硬件抽象层 455
15.2.3 实现上层部分 456
15.3 实现传感器 460
第16章 Wi-Fi系统、蓝牙系统和GPS系统 466
16.1 Wi-Fi系统的应用和移植 466
16.1.1 Wi-Fi系统的结构 466
16.1.2 移植的内容 468
16.1.3 移植和调试 468
16.1.4 OMAP平台实现Wi-Fi 476
16.1.5 配置Wi-Fi 478
16.1.6 SDIO设备的移植 481
16.1.7 移植Wi-Fi驱动的注意事项 485
16.2 蓝牙系统的应用和移植 486
16.2.1 蓝牙结构 487
16.2.2 移植的内容 489
16.2.3 具体移植 490
16.2.4 MSM平台的蓝牙驱动 492
16.2.5 本地适配器连接过程 494
16.2.6 远程适配器连接过程 498
16.2.7 分析6410的蓝牙驱动 500
16.3 定位系统 510
16.3.1 系统结构 510
16.3.2 移植的内容 512
16.3.3 移植和调试 512
16.3.4 GPS的串口驱动和数据读取 525
第17章 振动器驱动和警报器驱动 529
17.1 Alarm系统基础 529
17.1.1 Alarm系统的结构 529
17.1.2 移植的内容 532
17.2 移植和调试 532
17.3 实现Alarm驱动 535
17.4 MSM平台实现Alarm 542
第18章 光系统驱动和电池系统驱动 544
18.1 Lights光系统的应用和移植 544
18.1.1 Lights系统的结构 544
18.1.2 移植的内容 545
18.1.3 移植和调试 546
18.1.4 MSM平台实现光系统 547
18.1.5 深入分析Android的光系统 548
18.2 Battery电池系统的应用和移植 549
18.2.1 Battery系统的结构 549
18.2.2 移植的内容 551
18.2.3 移植和调试 551
18.2.4 模拟器中实现电池系统 554