第1章 Android底層開發基礎 1
1.1 什麼是驅動 1
1.1.1 驅動程序的魅力 1
1.1.2 手機中的驅動程序 2
1.2 開源還是不開源的問題 2
1.2.1 霧裏看花的開源 2
1.2.2 從為什麼選擇Java談為什麼不開源驅動程序 3
1.2.3 對驅動開發者來說是一把雙刃劍 4
1.3 Android和Linux 4
1.3.1 Linux簡介 4
1.3.2 Android和Linux的關係 5
1.4 簡析Linux內核 7
1.4.1 內核的體係結構 7
1.4.2 和Android密切相關的Linux內核知識 9
1.5 分析Linux內核源代碼很有必要 13
1.5.1 源代碼目錄結構 14
1.5.2 Linux 3.10的特性 16
1.5.3 瀏覽源代碼的工具 17
1.5.4 為什麼用匯編語言編寫內核代碼 17
1.5.5 Linux內核的顯著特性 18
1.5.6 學習Linux內核的方法 26
第2章 分析Android源代碼 31
2.1 搭建Linux開發環境和工具 31
2.1.1 搭建Linux開發環境 31
2.1.2 設置環境變量 32
2.1.3 安裝編譯工具 32
2.2 獲取Android源代碼 33
2.3 分析並編譯Android源代碼 35
2.3.1 Android源代碼的結構 35
2.3.2 編譯Android源代碼 40
2.3.3 運行Android源代碼 42
2.3.4 實踐演練——演示編譯Android程序的兩種方法 43
2.4 編譯Android Kernel 46
2.4.1 獲取Goldfish內核代碼 47
2.4.2 獲取MSM內核代碼 49
2.4.3 獲取OMAP內核代碼 49
2.4.4 編譯Android的Linux內核 50
2.5 運行模擬器 51
2.5.1 Linux環境下運行模擬器的方法 52
2.5.2 模擬器輔助工具——adb 53
第3章 驅動需要移植 56
3.1 驅動開發需要做的工作 56
3.2 Android移植 58
3.2.1 移植的任務 59
3.2.2 移植的內容 59
3.2.3 驅動開發的任務 60
3.3 Android對Linux的改造 60
3.3.1 Android對Linux內核文件的改動 61
3.3.2 為Android構建Linux的操作係統 62
3.4 內核空間和用戶空間接口是一個媒介 63
3.4.1 內核空間和用戶空間的相互作用 63
3.4.2 係統和硬件之間的交互 63
3.4.3 使用Relay實現內核到用戶空間的數據傳輸 65
3.5 三類驅動程序 68
3.5.1 字符設備驅動程序 68
3.5.2 塊設備驅動程序 76
3.5.3 網絡設備驅動程序 80
第4章 HAL層深入分析 81
4.1 認識HAL層 81
4.1.1 HAL層的發展 81
4.1.2 過去和現在的區彆 83
4.2 分析HAL層源代碼 83
4.2.1 分析HAL moudle 83
4.2.2 分析mokoid工程 87
4.3 總結HAL層的使用方法 95
4.4 傳感器在HAL層的錶現 97
4.4.1 HAL層的Sensor代碼 98
4.4.2 總結Sensor編程的流程 99
4.4.3 分析Sensor源代碼看Android API 與硬件平颱的銜接 100
4.5 移植總結 110
4.5.1 移植各個Android部件的方式 110
4.5.2 移植技巧之一——不得不說的輔助工作 111
4.6 開發一個硬件驅動程序 117
4.6.1 源代碼文件wuming.h和wuming.c 117
4.6.2 編譯配置處理 123
4.6.3 修改配置文件 124
4.6.4 驗證驅動程序 125
第5章 分析Goldfish內核係統 127
5.1 Android專有驅動介紹 127
5.2 Goldfish基礎 128
5.3 Android專用驅動簡介 130
5.3.1 Logger驅動介紹 130
5.3.2 Low Memory Killer組件介紹 130
5.3.3 Timed Output驅動介紹 131
5.3.4 Timed Gpio驅動介紹 131
5.3.5 Ram Console驅動介紹 132
5.4 Ashmem驅動介紹 133
5.5 Pmem驅動介紹 133
5.6 Alarm驅動程序 134
5.7 USB Gadget驅動程序 134
5.8 Paranoid驅動介紹 135
5.9 Goldfish的設備驅動 136
第6章 MSM內核和驅動解析 139
6.1 MSM基礎 139
6.1.1 常見MSM處理器産品 139
6.1.2 Snapdragon內核介紹 140
6.2 移植MSM內核簡介 141
6.3 移植MSM 143
6.3.1 Makefile文件 143
6.3.2 驅動和組件 144
6.3.3 設備驅動 146
6.3.4 高通特有的組件 148
第7章 OMAP內核和驅動解析 151
7.1 OMAP基礎 151
7.1.1 OMAP簡析 151
7.1.2 常見OMAP處理器産品 151
7.1.3 開發平颱 152
7.2 OMAP內核 152
7.3 移植OMAP體係結構 154
7.3.1 移植OMAP平颱 154
7.3.2 移植OMAP處理器 157
7.4 移植Android專用驅動和組件 161
7.5 OMAP的設備驅動 162
7.5.1 顯示驅動程序 162
7.5.2 I2C總綫驅動程序 162
7.5.3 攝像頭和視頻輸齣驅動程序 164
7.5.4 觸摸屏和鍵盤驅動程序 165
7.5.5 實時時鍾驅動程序 166
7.5.6 音頻驅動程序 166
7.5.7 藍牙驅動程序 166
第8章 顯示係統驅動應用 167
8.1 顯示係統介紹 167
8.2 分析內核層 168
8.2.1 分析接口文件fb.h 168
8.2.2 分析內核實現文件fbmem.c 171
8.3 分析硬件抽象層 195
8.3.1 分析頭文件 195
8.3.2 分析硬件幀緩衝區 197
8.3.3 實現緩衝區的分配 199
8.3.4 顯示緩衝映射 200
8.3.5 分析管理庫文件LayerBuffer.cpp 201
8.4 分析顯示係統的驅動程序 202
8.4.1 Goldfish中的FrameBuffer驅動程序 203
8.4.2 使用Gralloc模塊的驅動程序 205
8.4.3 分析MSM高通處理器中的顯示驅動實現 215
8.4.4 分析OMAP處理器中的顯示驅動實現 225
第9章 輸入係統驅動應用 228
9.1 輸入係統介紹 228
9.1.1 Android輸入係統結構元素介紹 228
9.1.2 移植Android輸入係統時的工作 229
9.2 分析Input(輸入)係統驅動 230
9.2.1 分析頭文件 230
9.2.2 分析核心文件input.c 234
9.2.3 分析event機製 249
9.3 分析硬件抽象層 251
9.3.1 分析文件KeycodeLabels.h 252
9.3.2 分析文件KeyCharacterMap.h 256
9.3.3 分析Kl格式文件 257
9.3.4 分析kcm格式文件 258
9.3.5 分析文件EventHub.cpp 258
第10章 振動器係統驅動 263
10.1 振動器係統結構 263
10.2 分析硬件抽象層 265
10.3 分析JNI層部分 266
10.4 分析Java層部分 267
10.5 實現移植工作 271
10.5.1 移植振動器驅動程序 271
10.5.2 實現硬件抽象層 271
10.6 在MSM平颱實現振動器驅動 272
第11章 音頻係統驅動 276
11.1 音頻係統結構 276
11.2 分析音頻係統的層次 277
11.2.1 層次說明 277
11.2.2 Media庫中的Audio框架 278
11.2.3 本地代碼 280
11.2.4 分析JNI代碼 283
11.2.5 Java層代碼簡介 284
11.3 移植Audio係統的工作 285
11.3.1 我們的工作 285
11.3.2 分析硬件抽象層 285
11.3.3 分析AudioFlinger中的Audio硬件抽象層的實現 287
11.3.4 真正實現Audio硬件抽象層 293
11.4 在MSM平颱實現Audio驅動係統 293
11.4.1 實現Audio驅動程序 293
11.4.2 實現硬件抽象層 294
第12章 視頻輸齣係統驅動 299
12.1 視頻輸齣係統結構 299
12.2 需要移植的部分 301
12.3 分析硬件抽象層 301
12.3.1 Overlay係統硬件抽象層的接口 301
12.3.2 實現Overlay係統的硬件抽象層 304
12.3.3 實現接口 305
12.4 實現Overlay硬件抽象層 306
12.5 在OMAP平颱實現Overlay係統 307
12.5.1 實現輸齣視頻驅動程序 307
12.5.2 實現Overlay硬件抽象層 309
12.6 係統層調用Overlay HAL的架構 314
12.6.1 調用Overlay HAL的架構的流程 314
12.6.2 S3C6410 Android Overlay的測試代碼 317
第13章 OpenMax多媒體框架 320
13.1 OpenMax基本層次結構 320
13.2 分析OpenMax框架構成 321
13.2.1 OpenMax總體層次結構 321
13.2.2 OpenMax IL層的結構 322
13.2.3 Android中的OpenMax 325
13.3 實現OpenMax IL層接口 325
13.3.1 OpenMax IL層的接口 325
13.3.2 在OpenMax IL層中需要做什麼 331
13.3.3 研究Android中的OpenMax適配層 332
13.4 在OMAP平颱實現OpenMax IL 334
13.4.1 實現文件 334
13.4.2 分析TI OpenMax IL的核心 335
13.4.3 實現TI OpenMax IL組件實例 338
第14章 多媒體插件框架 343
14.1 Android多媒體插件 343
14.2 需要移植的內容 344
14.3 OpenCore引擎 345
14.3.1 OpenCore層次結構 345
14.3.2 OpenCore代碼結構 346
14.3.3 OpenCore編譯結構 347
14.3.4 OpenCore OSCL 351
14.3.5 實現OpenCore中的OpenMax部分 353
14.3.6 OpenCore的擴展 366
14.4 Stagefright引擎 371
14.4.1 Stagefright代碼結構 372
14.4.2 Stagefright實現OpenMax接口 372
14.4.3 Video Buffer傳輸流程 376
第15章 傳感器係統 381
15.1 傳感器係統的結構 381
15.2 分析需要移植的內容 383
15.2.1 移植驅動程序 383
15.2.2 移植硬件抽象層 384
15.2.3 實現上層部分 385
15.3 在模擬器中實現傳感器驅動 389
第16章 照相機係統 395
16.1 Camera係統的結構 395
16.2 分析需要移植的內容 397
16.3 移植和調試 398
16.3.1 V4L2驅動程序 398
16.3.2 硬件抽象層 405
16.4 實現Camera係統的硬件抽象層 409
16.4.1 Java程序部分 409
16.4.2 Camera的Java本地調用部分 410
16.4.3 Camera的本地庫libui.so 411
16.4.4 Camera服務libcameraservice.so 412
16.5 在MSM平颱實現Camera驅動係統 416
16.6 在OMAP平颱實現Camera驅動係統 419
第17章 Wi-Fi係統、藍牙係統和GPS係統 421
17.1 Wi-Fi係統 421
17.1.1 Wi-Fi係統的結構 421
17.1.2 需要移植的內容 423
17.1.3 移植和調試 423
17.1.4 OMAP平颱實現Wi-Fi 430
17.1.5 配置Wi-Fi的流程 432
17.1.6 具體演練——在Android下實現Ethernet 435
17.2 藍牙係統 436
17.2.1 藍牙係統的結構 437
17.2.2 需要移植的內容 438
17.2.3 具體移植 439
17.2.4 MSM平颱的藍牙驅動 441
17.3 定位係統 443
17.3.1 定位係統的結構 443
17.3.2 分析需要移植的內容 445
17.3.3 分析驅動程序 445
17.3.4 分析硬件抽象層 445
17.3.5 分析上層應用部分 448
第18章 電話係統 457
18.1 電話係統基礎 457
18.1.1 電話係統簡介 457
18.1.2 電話係統結構 459
18.2 需要移植的內容 460
18.3 移植和調試 460
18.3.1 驅動程序 461
18.3.2 RIL接口 462
18.4 電話係統實現流程分析 465
18.4.1 初始啓動流程 465
18.4.2 request流程 467
18.4.3 response流程 470
第19章 分析時鍾係統驅動 472
19.1 Alarm係統基礎 472
19.1.1 Alarm層次結構介紹 472
19.1.2 我們需要移植的內容 474
19.2 分析RTC驅動程序 474
19.3 分析Alarm驅動程序 475
19.3.1 分析文件android_alarm.h 475
19.3.2 分析文件alarm.c 476
19.3.3 分析文件alarm-dev.c 488
19.4 分析JNI層 497
19.5 分析Java層 498
19.5.1 分析AlarmManagerService類 499
19.5.2 分析AlarmManager類 508
19.6 模擬器環境的具體實現 509
第20章 分析USB Gadget驅動 511
20.1 分析Linux內核的USB驅動程序 511
20.1.1 USB設備基礎 511
20.1.2 分析USB 和sysfs的聯係 516
20.1.3 分析urb通信方式 518
20.1.4 分析USB驅動的例程 524
20.2 分析USB Gadget驅動 536
20.2.1 分析軟件結構 536
20.2.2 層次整閤 546
20.2.3 USB設備枚舉 557
第21章 其他係統 573
21.1 Lights光係統 573
21.1.1 Lights光係統的結構 573
21.1.2 需要移植的內容 574
21.1.3 移植和調試 575
21.1.4 MSM平颱實現光係統 577
21.2 Battery電池係統 577
21.2.1 Battery係統的結構 578
21.2.2 需要移植的內容 579
21.2.3 移植和調試 579
21.2.4 在模擬器中實現電池係統 582
· · · · · · (
收起)