《Android底層開發技術實戰詳解——核心、移植和驅動(第2版)》是2015年3月電子工業出版社出版的圖書,作者是王振麗。
基本介紹
- 書名:Android底層開發技術實戰詳解——核心、移植和驅動(第2版)
- 作者:王振麗等
- ISBN:978-7-121-25441-3
- 頁數:592
- 定價:79.00元
- 出版社:電子工業出版社
- 出版時間:2015年3月
- 裝幀:平裝
- 開本:16開
內容簡介,目錄,前言,
內容簡介
《Android底層開發技術實戰詳解——核心、移植和驅動(第2版)》從底層原理開始講起,結合真實的案例向讀者詳細介紹了Android核心、移植和驅動開發的整個流程。全書分為21章,依次講解驅動移植的必要性,何為HAL層深入分析,Goldfish、MSM、OMAP核心和驅動解析,顯示系統、輸入系統、振動器系統、音頻系統、視頻輸出系統的驅動,OpenMax多媒體和多媒體外掛程式框架,感測器,照相機,Wi-Fi,藍牙和GPS,電話系統,時鐘系統,USB Gadget驅動,Lights光系統和Battery電池系統等。在每一章中,重點介紹了與Android驅動開發相關的底層知識,並對Android源碼進行了剖析。
《Android底層開發技術實戰詳解——核心、移植和驅動(第2版)》適合Android研發人員及Android愛好者學習,也可以作為相關培訓學校和大專院校相關專業的教學用書。
目錄
第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
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
前言
隨著3G/4G的到來,無線頻寬越來越高,使得更多內容豐富的應用程式裝入手機成為可能,如視頻通話、視頻點播、移動網際網路衝浪和內容分享等。為了承載這些數據套用及快速部署,手機功能將會越來越智慧型,越來越開放。為了實現這些需求,必須有一個開發平台來支持,在此由谷歌(Google)公司發起的OHA聯盟走在了業界的前列,2007年11月推出了開放的Android平台,任何公司及個人都可以免費獲取原始碼及開發SDK。由於其開放性和優異性,Android平台得到了業界廣泛的支持,其中包括各大手機廠商和移動運營商等。繼2008年9月第一款基於Android平台的手機G1 發布之後,主流手機製造商都推出了自己的Android平台手機。在2011年年底,Android超越了塞班和iOS,雄踞智慧型手機市場占有率榜首的位置。根據國際數據公司(IDC)5月公布的新數據,在2013年第一季度,Android和iOS系統占的裝機量到所有智慧型手機出貨量的92.3%。在2013年頭三個月,安裝Android系統的新智慧型手機數量躍升至1.621億部,大大超過去年同期的9030萬部。這意味著,在銷往世界各地的所有新智慧型手機中,谷歌的移動作業系統的市場占有率已經達到75%,與第一季度的59.1%相比有顯著提高。
畢竟 Android平台被推出的時間才短短六七年,了解Android平台軟體開發技術的程式設計師還不多,如何迅速地推廣和普及Android平台軟體開發技術,讓越來越多的人參與到Android套用的開發中,是整個產業鏈都在關注的一個話題。為了幫助開發者更快地進入Android開發行列,筆者特意精心編寫了本書。本書系統地講解了Android底層驅動開發和移植的基本知識,圖文並茂地幫助讀者學習和掌握各種驅動的開發常識,詳細講解了Android原始碼的方方面面。
從技術角度而言,Android是一種融入了全部Web套用的平台。隨著版本的更新,從最初的觸屏到當前的多點觸摸,從普通的聯繫人到當前的數據同步,從簡單的Google Map到當前的導航系統,從基本的網頁瀏覽到當前的HTML 5,都說明Android已經逐漸穩定,而且功能越來越強大。此外,Android平台不僅支持 Java、C、C++等主流的程式語言,還支持Ruby、Python等腳本語言,甚至Google專為Android的套用開發推出了Simple語言,這使得Android有著非常廣泛的開發群體。
本書內容
在本書的內容中,詳細講解了Android底層技術和驅動開發的基本知識。本書內容新穎、知識全面、講解詳細,全書分為21章,具體內容分布如下。
章 主要內容
第1章 什麼是驅動以及Linux核心原始碼簡單剖析
第2章 搭建Linux開發環境,分析及編譯Android原始碼,在Linux環境下運行模擬器
第3章 Android移植的內容、驅動開發所要完成的任務,三種類型的驅動程式
第4章 感測器在HAL層的表現,HAL層的原始碼與移植
第5章 Goldfish下的staging、Ashmen、Pmem、Alarm和Android Paranoid驅動
第6章 MSM核心與MSM的移植
第7章 OMAP核心與移植
第8章 顯示系統的移植、調試與驅動程式實現
第9章 MSM處理器和OMAP處理器平台中輸入驅動的實現
第10章 振動器的系統結構與移植
第11章 音頻系統的層次、移植與不同平台下的實現
第12章 視頻輸出系統Overlay的分析、實現、調用
第13章 OpenMax多媒體框架的層次和實現
第14章 OpenCore引擎和Stagefright引擎的代碼結構與擴展
第15章 感測器系統的結構、移植與實現
第16章 照相機系統的結構、移植與實現
第17章 Wi-Fi系統、藍牙系統和定位系統的移植
第18章 開發電話系統
第19章 分析時鐘系統驅動,實現時鐘驅動程式的開發、移植和模擬器測試
第20章 分析USB Gadget驅動,依次講解分析軟體結構、層次整合和USB設備枚舉
第21章 Lights光系統和Battery電池系統
全書內容都採用了理論加實踐的教學方法,每個實例先提出製作思路及包含知識點,在實例最後補充總結知識點並出題幫助讀者舉一反三。
本書特色
本書內容豐富,實例內容覆蓋全面,滿足Android技術人員成長道路上的方方面面。編者的目標是通過一本圖書,提供多本圖書的價值,讀者可以根據自己的需要有選擇地閱讀,以完善自身的知識和技能結構。在內容的編寫上,本書具有以下特色。
(1)結構合理
從讀者的實際需要出發,科學安排知識結構,內容由淺入深,敘述清楚,具有很強的知識性和實用性,反映了當前Android技術的發展和套用水平。同時全書精心篩選的最具代表性、讀者最關心典型知識點,幾乎包括Android底層和驅動技術的各個方面。
(2)易學易懂
本書條理清晰、語言簡潔,可幫助讀者快速掌握每個知識點;每個部分既相互連貫又自成體系,使讀者既可以按照本書編排的章節順序進行學習,也可以根據自己的需求對某一章節進行針對性的學習。
(3)實用性強
本書徹底摒棄枯燥的理論和簡單的操作,注重實用性和可操作性,詳細講解了各個部分的原始碼知識,使用戶在掌握相關操作技能的同時,還能學到相應的基礎知識。
本書作者
參加本書編寫的人員有:懷志和、王振麗、林慧晶、程娟、王文忠、陳強、何子夜、李天祥、萬春朝、扶松柏、鄧才兵、周銳、王東華、管西京、薛小龍。本團隊在編寫過程中由於時間和水平所限,書中難免有不足之處。如有紕漏和不盡如人意之處,誠請讀者提出意見或建議,以便修訂並使之更臻完善。另外,為了更好地為讀者服務,本書專門提供了技術支持網站,歡迎讀者光臨,無論是書中的質疑,還是學習過程中的疑惑,本團隊將盡力為大家解答。
編者
2014年11月