第1章 Android底層開發(fā)基礎 1
1.1 什么是驅動 1
1.1.1 驅動程序的魅力 1
1.1.2 電腦中的驅動 2
1.1.3 手機中的驅動程序 2
1.2 開源還是不開源的問題 3
1.2.1 霧里看花的開源 3
1.2.2 從為什么選擇Java談為什么不
開源驅動程序 3
1.2.3 對驅動開發(fā)者來說是一把雙刃劍 4
1.3 Android和Linux 4
1.3.1 Linux簡介 5
1.3.2 Android和Linux的關系 5
1.4 簡析Linux內核 8
1.4.1 內核的體系結構 8
1.4.2 和Android密切相關的Linux
內核知識 10
1.5 分析Linux內核源代碼很有必要 14
1.5.1 源代碼目錄結構 14
1.5.2 瀏覽源代碼的工具 16
1.5.3 為什么用匯編語言編寫內核
代碼 17
1.5.4 Linux內核的顯著特性 18
1.5.5 學習Linux內核的方法 26
第2章 分析Android源代碼 31
2.1 搭建Linux開發(fā)環(huán)境和工具 31
2.1.1 搭建Linux開發(fā)環(huán)境 31
2.1.2 設置環(huán)境變量 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 47
2.4.1 獲取Goldfish內核代碼 47
2.4.2 獲取MSM內核代碼 50
2.4.3 獲取OMAP內核代碼 50
2.4.4 編譯Android的Linux內核 50
2.5 運行模擬器 52
2.5.1 Linux環(huán)境下運行模擬器的方法 53
2.5.2 模擬器輔助工具——adb 54
第3章 驅動需要移植 57
3.1 驅動開發(fā)需要做的工作 57
3.2 Android移植 59
3.2.1 移植的任務 60
3.2.2 移植的內容 60
3.2.3 驅動開發(fā)需要做的工作 61
3.3 Android對Linux的改造 61
3.3.1 Android對Linux內核文件的
改動 62
3.3.2 為Android構建 Linux的操作
系統(tǒng) 63
3.4 內核空間和用戶空間接口是一
個媒介 64
3.4.1 內核空間和用戶空間的相互
作用 64
3.4.2 系統(tǒng)和硬件之間的交互 64
3.4.3 使用Relay實現內核到用戶空
間的數據傳輸 66
3.5 三類驅動程序 70
3.5.1 字符設備驅動程序 70
3.5.2 塊設備驅動程序 79
3.5.3 網絡設備驅動程序 82
第4章 HAL層深入分析 84
4.1 認識HAL層 84
4.1.1 HAL層的發(fā)展 84
4.1.2 過去和現在的區(qū)別 86
4.2 分析HAL層源代碼 86
4.2.1 分析HAL moudle 86
4.2.2 分析mokoid工程 89
4.3 總結HAL層的使用方法 98
4.4 傳感器在HAL層的表現 101
4.4.1 HAL層的Sensor代碼 102
4.4.2 總結Sensor編程的流程 104
4.4.3 分析Sensor源代碼看Android
API 與硬件平臺的銜接 104
4.5 移植總結 116
4.5.1 移植各個Android部件的方式 116
4.5.2 移植技巧之一——不得不說的
輔助工作 117
第5章 Goldfish下的驅動解析 125
5.1 staging驅動 125
5.1.1 staging驅動概述 125
5.1.2 Binder驅動程序 126
5.1.3 Logger驅動程序 135
5.1.4 Lowmemorykiller組件 136
5.1.5 Timed Output驅動程序 137
5.1.6 Timed Gpio驅動程序 139
5.1.7 Ram Console驅動程序 139
5.2 wakelock和early_suspend 140
5.2.1 wakelock和early_suspend的
原理 140
5.2.2 Android休眠 141
5.2.3 Android喚醒 144
5.3 Ashmem驅動程序 145
5.4 Pmem驅動程序 148
5.5 Alarm驅動程序 149
5.5.1 Alarm簡析 149
5.5.2 Alarm驅動程序的實現 150
5.6 USB Gadget驅動程序 151
5.7 Android Paranoid驅動程序 153
5.8 Goldfish設備驅動 154
5.8.1 FrameBuffer驅動 155
5.8.2 鍵盤驅動 159
5.8.3 實時時鐘驅動程序 160
5.8.4 TTY終端驅動程序 161
5.8.5 NandFlash驅動程序 162
5.8.6 MMC驅動程序 162
5.8.7 電池驅動程序 162
第6章 MSM內核和驅動解析 164
6.1 MSM基礎 164
6.1.1 常見MSM處理器產品 164
6.1.2 Snapdragon內核介紹 165
6.2 移植MSM內核簡介 166
6.3 移植MSM 168
6.3.1 Makefile文件 168
6.3.2 驅動和組件 170
6.3.3 設備驅動 172
6.3.4 高通特有的組件 174
第7章 OMAP內核和驅動解析 177
7.1 OMAP基礎 177
7.1.1 OMAP簡析 177
7.1.2 常見OMAP處理器產品 177
7.1.3 開發(fā)平臺 178
7.2 OMAP內核 178
7.3 移植OMAP體系結構 180
7.3.1 移植OMAP平臺 180
7.3.2 移植OMAP處理器 183
7.4 移植Android專用驅動和組件 188
7.5 OMAP的設備驅動 190
第8章 顯示系統(tǒng)驅動應用 195
8.1 顯示系統(tǒng)介紹 195
8.1.1 Android的版本 195
8.1.2 不同版本的顯示系統(tǒng) 195
8.2 移植和調試前的準備 196
8.2.1 FrameBuffer驅動程序 196
8.2.2 硬件抽象層 198
8.3 實現顯示系統(tǒng)的驅動程序 210
8.3.1 Goldfish中的FrameBuffer驅動
程序 210
8.3.2 使用Gralloc模塊的驅動程序 214
8.4 MSM高通處理器中的顯示驅動
實現 224
8.4.1 MSM中的FrameBuffer驅動
程序 225
8.4.2 MSM中的Gralloc驅動程序 227
8.5 OMAP處理器中的顯示驅動實現 235
第9章 輸入系統(tǒng)驅動應用 239
9.1 輸入系統(tǒng)介紹 239
9.1.1 Android輸入系統(tǒng)結構元素
介紹 239
9.1.2 移植Android輸入系統(tǒng)時的
工作 240
9.2 Input(輸入)驅動 241
9.3 模擬器的輸入驅動 256
9.4 MSM高通處理器中的輸入驅動
實現 257
9.4.1 觸摸屏驅動 257
9.4.2 按鍵和軌跡球驅動 264
9.5 OMAP處理器平臺中的輸入驅
動實現 266
9.5.1 觸摸屏驅動 267
9.5.2 鍵盤驅動 267
第10章 振動器系統(tǒng)驅動 269
10.1 振動器系統(tǒng)結構 269
10.1.1 硬件抽象層 271
10.1.2 JNI框架部分 272
10.2 開始移植 273
10.2.1 移植振動器驅動程序 273
10.2.2 實現硬件抽象層 274
10.3 在MSM平臺實現振動器驅動 275
第11章 音頻系統(tǒng)驅動 279
11.1 音頻系統(tǒng)結構 279
11.2 分析音頻系統(tǒng)的層次 280
11.2.1 層次說明 280
11.2.2 Media庫中的Audio框架 281
11.2.3 本地代碼 284
11.2.4 JNI代碼 288
11.2.5 Java代碼 289
11.3 移植Audio系統(tǒng)的必備技術 289
11.3.1 移植Audio系統(tǒng)所要做的
工作 289
11.3.2 分析硬件抽象層 290
11.3.3 分析AudioFlinger中的Audio
硬件抽象層的實現 291
11.4 真正實現Audio硬件抽象層 298
11.5 MSM平臺實現Audio驅動系統(tǒng) 298
11.5.1 實現Audio驅動程序 298
11.5.2 實現硬件抽象層 299
11.6 OSS平臺實現Audio驅動系統(tǒng) 304
11.6.1 OSS驅動程序介紹 304
11.6.2 mixer 305
11.7 ALSA平臺實現Audio系統(tǒng) 312
11.7.1 注冊音頻設備和音頻驅動 312
11.7.2 在Android中使用ALSA
聲卡 313
11.7.3 在OMAP平臺移植Android
的ALSA聲卡驅動 322
第12章 視頻輸出系統(tǒng)驅動 326
12.1 視頻輸出系統(tǒng)結構 326
12.2 需要移植的部分 328
12.3 分析硬件抽象層 328
12.3.1 Overlay系統(tǒng)硬件抽象層的
接口 328
12.3.2 實現Overlay系統(tǒng)的硬件抽
象層 331
12.3.3 實現接口 3