《Android驅動開發權威指南》是2014年機械工業出版社出版的圖書,作者是楊柳。
基本介紹
- 書名:Android驅動開發權威指南
- 類型:計算機與網際網路
- 出版日期:2014年3月1日
- 語種:簡體中文
- ISBN:9787111451822
- 作者:楊柳
- 出版社:機械工業出版社
- 頁數:320頁
- 開本:16開
- 品牌:機械工業出版社
內容簡介,作者簡介,圖書目錄,
內容簡介
《Android驅動開發權威指南》根據作者(楊柳)多年的從業經驗,從開發實戰出發,全面深入地講解了Android驅動開發。全書以Android驅動本質為源,深入淺出地剖析了Android驅動程式開發要用到的DMA、中斷、同步、等待佇列與signal等多項技術。還從系統的角度描述了Android驅動與Android其他部分的有機結合,為Android用戶提供各類智慧型輸入/輸出服務。
《Android驅動開發權威指南》適合從事Linux開發、Android底層驅動開發、系統框架開發,以及Android底層模組驗證測試等的相關軟體工程人員閱讀;也適合從事Android智慧型手機其他領域的研發人員參考;還適合作為大、中專院校與培訓機構的相關實踐性指導教材。
作者簡介
楊柳,國內某著名大型通信公司資深嵌入式系統工程師,CSDN正式會員、GooglePlay簽約註冊開發者;國家863計畫某項目主要成員,該項目開發了國內第一款Linux智慧型手機。作者擁有豐富的Linux、WindowsPhone以及Android手機研發經驗。
圖書目錄
前言
第一篇 Android的前世今生——Android概述篇
第1章 Android的前世今生2
1.1 Android的起源2
1.2 開放手機聯盟2
1.3 開源與相關協定3
1.4 系統的升級與發展3
第2章 Android體系結構4
2.1 四層空間基本結構4
2.1.1 Android系統底層開發6
2.1.2 應用程式開發7
2.2 Android代碼目錄結構7
2.3 Android開發環境搭建8
第二篇 勿於浮砂築高台——Linux驅動基礎篇
第3章 Linux核心綜述14
3.1 OS基本概念14
3.1.1 多用戶系統15
3.1.2 用戶和組15
3.1.3 進程16
3.1.4 Linux單核架構16
3.2 Linux核心綜述18
3.2.1 進程/核心模型綜述18
3.2.2 記憶體管理綜述26
3.2.3 檔案系統綜述29
3.2.4 設備驅動簡述34
第4章 Linux核心編程與核心模組35
4.1 Linux核心原始碼目錄結構35
4.2 Linux核心的編譯與啟動36
4.3 Linux核心的C編程37
4.4 Linux核心模組基礎與骨架43
4.5 Linux模組的載入與卸載46
4.6 Linux模組的參數與導出符號46
4.7 Linux模組的使用計數48
第5章 Linux檔案系統50
5.1 Linux檔案系統概述50
5.1.1 Linux檔案系統的目錄結構50
5.1.2 設備驅動與Linux檔案系統的關聯51
5.2 Linux設備檔案系統55
5.2.1 devfs設備檔案系統55
5.2.2 udev設備檔案系統56
5.2.3 sysfs檔案系統與Linux設備57
5.2.4 udev的組成67
5.2.5 udev規則檔案68
第6章 Linux字元設備驅動70
6.1 Linux字元設備驅動結構70
6.1.1 cdev結構體70
6.1.2 分配和釋放設備號71
6.1.3 file_operations結構體72
6.1.4 Linux字元設備驅動的組成74
6.2 一個字元設備驅動例子——virtualchar77
6.2.1 頭檔案、宏及設備結構體77
6.2.2 載入與卸載設備驅動78
6.2.3 驅動函式實現79
6.2.4 驅動設備私有數據83
6.3 對virtualchar設備的訪問90
第7章 Linux設備驅動中的記憶體與I/O訪問92
7.1 CPU與記憶體和I/O之間的故事92
7.1.1記憶體空間與I/O空間92
7.1.2 記憶體管理單元MMU93
7.2 Linux記憶體管理97
7.3 Linux記憶體訪問99
7.4 LinuxI/O訪問102
7.4.1 訪問I/O102
7.4.2 申請與釋放I/O資源105
7.4.3 I/O訪問流程107
7.4.4 設備地址與用戶空間的映射107
7.5 DMA114
7.5.1 DMA與Cache的一致性114
7.5.2 Linux下的DMA編程114
第8章 Linux設備驅動中的中斷125
8.1 Linux中斷及中斷處理架構125
8.2 Linux中斷編程126
8.2.1 申請和釋放中斷126
8.2.2 使能與禁止中斷127
8.2.3 底半部機制127
8.2.4 中斷共享130
8.3 Linux定時器132
8.4 Linux延時處理134
8.4.1 短延時135
8.4.2 長延時135
8.4.3 睡眠延時136
第9章 Linux設備驅動中的並發138
9.1 Linux中的並發與競爭138
9.2 Linux中常用的同步訪問技術139
9.2.1 中斷禁止139
9.2.2 原子操作140
9.2.3 自旋鎖142
9.2.4 信號量147
9.2.5 互斥燈152
9.3 增加並發控制的virtualchar驅動153
第10章 Linux設備的阻塞式與非阻塞式訪問157
10.1 阻塞式與非阻塞式訪問157
10.1.1 等待佇列158
10.1.2 支持阻塞操作的virtualfifo設備驅動162
10.2 Linux的輪詢訪問167
10.2.1 應用程式中的輪詢編程167
10.2.2 設備驅動中的輪詢編程168
10.2.3 支持輪詢操作的virtualfifo驅動169
第11章 Linux設備驅動中的異步訪問171
11.1 Linux2.6中的異步訪問171
11.1.1 異步訪問概念與GNUC庫函式171
11.1.2 使用信號作為異步訪問的通知175
11.1.3 使用回調函式作為異步訪問的通知177
11.1.4 異步訪問與設備驅動178
11.2 異步Fifo驅動例子180
11.2.1 在virtualfifo驅動中增加異步通知180
11.2.2 在用戶空間驗證virtualfifo的異步通知182
第12章 Linux塊設備驅動184
12.1 塊設備的I/O操作特點184
12.2 Linux塊設備驅動結構184
12.2.1 block_device_operations結構體184
12.2.2 gendisk結構體186
12.2.3 request與bio結構體188
12.2.4 塊設備驅動註冊與註銷197
12.3 Linux塊設備驅動的模組載入與卸載198
12.4 塊設備的打開/釋放/IOCTL200
第13章 Linux網路設備驅動202
13.1 Linux網路設備驅動體系結構202
13.2 Linux網路設備驅動結構203
13.3 Linux網路設備驅動I/O實現204
13.3.1 網路設備初始化204
13.3.2 網路數據包的收發205
第三篇 實踐出真知——Android驅動實踐篇
第14章 AndroidHAL層的設計208
14.1 AndroidHAL概述208
14.2 為Android開發虛擬驅動virtualio209
14.3 Android集成C程式訪問virtualio220
14.4 Android通過HAL訪問virtualio222
14.4.1 virtualioHAL模組實現222
14.4.2 實現訪問virtualioHAL模組JNI226
14.4.3 在Framework層增加virtualio服務229
第15章 Framebuffer子系統231
15.1 LinuxFramebuffer一般子系統231
15.1.1 Framebuffer數據結構231
15.1.2 Framebuffer驅動237
15.2 AndroidFramebuffer子系統實踐238
15.2.1 硬體基礎238
15.2.2 CPU側顯示驅動模組240
15.2.3 LCM驅動模組242
15.3 Android系統對Framebuffer的使用247
第16章 Input子系統249
16.1 LinuxInput一般子系統249
16.1.1 Input數據結構250
16.1.2 Input核心模組252
16.2 AndroidInput子系統實踐257
16.2.1 硬體基礎258
16.2.2 Input驅動模組258
16.3 Android系統對Input的使用263
第17章 V4L2子系統266
17.1 LinuxV4L2一般子系統266
17.1.1 V4L2數據結構266
17.1.2 V4L2接口268
17.1.3 V4L2虛擬驅動vivi273
17.2 AndroidV4L2實踐279
17.2.1 硬體基礎280
17.2.2 CPU側CCIC驅動模組281
17.2.3 OV5642模組驅動模組283
17.3 Android系統對V4L2的使用286
第18章 BinderIPC通信子系統288
18.1 Binder驅動概述288
18.2 Binder通信模型288
18.3 Binder驅動291
18.3.1 Binder相關的結構體292
18.3.2 AndroidBinder子系統的架構設計292
18.4 Binder的工作流程293
第19章 USB子系統295
19.1 USB協定基礎知識295
19.1.1 USB物理連線295
19.1.2 USB通信協定297
19.2 USB子系統底層299
19.2.1 USBCore299
19.2.2 LinuxUSBgadget三層架構303
19.3 AndroidUSB子系統實踐305
19.3.1 AndroidIPC通信補充305
19.3.2 AndroidUSBMassStorage流程分析309
第20章 Bootloader引導子系統312
20.1 Bootloader流程分析312
20.1.1 Bootloader概述312
20.1.2 U—Boot啟動流程分析314
20.2 Bootloader修改指南317
20.2.1 開機第一幀圖的修改317
20.2.2 開機模式的定製318
參考文獻321
第一篇 Android的前世今生——Android概述篇
第1章 Android的前世今生2
1.1 Android的起源2
1.2 開放手機聯盟2
1.3 開源與相關協定3
1.4 系統的升級與發展3
第2章 Android體系結構4
2.1 四層空間基本結構4
2.1.1 Android系統底層開發6
2.1.2 應用程式開發7
2.2 Android代碼目錄結構7
2.3 Android開發環境搭建8
第二篇 勿於浮砂築高台——Linux驅動基礎篇
第3章 Linux核心綜述14
3.1 OS基本概念14
3.1.1 多用戶系統15
3.1.2 用戶和組15
3.1.3 進程16
3.1.4 Linux單核架構16
3.2 Linux核心綜述18
3.2.1 進程/核心模型綜述18
3.2.2 記憶體管理綜述26
3.2.3 檔案系統綜述29
3.2.4 設備驅動簡述34
第4章 Linux核心編程與核心模組35
4.1 Linux核心原始碼目錄結構35
4.2 Linux核心的編譯與啟動36
4.3 Linux核心的C編程37
4.4 Linux核心模組基礎與骨架43
4.5 Linux模組的載入與卸載46
4.6 Linux模組的參數與導出符號46
4.7 Linux模組的使用計數48
第5章 Linux檔案系統50
5.1 Linux檔案系統概述50
5.1.1 Linux檔案系統的目錄結構50
5.1.2 設備驅動與Linux檔案系統的關聯51
5.2 Linux設備檔案系統55
5.2.1 devfs設備檔案系統55
5.2.2 udev設備檔案系統56
5.2.3 sysfs檔案系統與Linux設備57
5.2.4 udev的組成67
5.2.5 udev規則檔案68
第6章 Linux字元設備驅動70
6.1 Linux字元設備驅動結構70
6.1.1 cdev結構體70
6.1.2 分配和釋放設備號71
6.1.3 file_operations結構體72
6.1.4 Linux字元設備驅動的組成74
6.2 一個字元設備驅動例子——virtualchar77
6.2.1 頭檔案、宏及設備結構體77
6.2.2 載入與卸載設備驅動78
6.2.3 驅動函式實現79
6.2.4 驅動設備私有數據83
6.3 對virtualchar設備的訪問90
第7章 Linux設備驅動中的記憶體與I/O訪問92
7.1 CPU與記憶體和I/O之間的故事92
7.1.1記憶體空間與I/O空間92
7.1.2 記憶體管理單元MMU93
7.2 Linux記憶體管理97
7.3 Linux記憶體訪問99
7.4 LinuxI/O訪問102
7.4.1 訪問I/O102
7.4.2 申請與釋放I/O資源105
7.4.3 I/O訪問流程107
7.4.4 設備地址與用戶空間的映射107
7.5 DMA114
7.5.1 DMA與Cache的一致性114
7.5.2 Linux下的DMA編程114
第8章 Linux設備驅動中的中斷125
8.1 Linux中斷及中斷處理架構125
8.2 Linux中斷編程126
8.2.1 申請和釋放中斷126
8.2.2 使能與禁止中斷127
8.2.3 底半部機制127
8.2.4 中斷共享130
8.3 Linux定時器132
8.4 Linux延時處理134
8.4.1 短延時135
8.4.2 長延時135
8.4.3 睡眠延時136
第9章 Linux設備驅動中的並發138
9.1 Linux中的並發與競爭138
9.2 Linux中常用的同步訪問技術139
9.2.1 中斷禁止139
9.2.2 原子操作140
9.2.3 自旋鎖142
9.2.4 信號量147
9.2.5 互斥燈152
9.3 增加並發控制的virtualchar驅動153
第10章 Linux設備的阻塞式與非阻塞式訪問157
10.1 阻塞式與非阻塞式訪問157
10.1.1 等待佇列158
10.1.2 支持阻塞操作的virtualfifo設備驅動162
10.2 Linux的輪詢訪問167
10.2.1 應用程式中的輪詢編程167
10.2.2 設備驅動中的輪詢編程168
10.2.3 支持輪詢操作的virtualfifo驅動169
第11章 Linux設備驅動中的異步訪問171
11.1 Linux2.6中的異步訪問171
11.1.1 異步訪問概念與GNUC庫函式171
11.1.2 使用信號作為異步訪問的通知175
11.1.3 使用回調函式作為異步訪問的通知177
11.1.4 異步訪問與設備驅動178
11.2 異步Fifo驅動例子180
11.2.1 在virtualfifo驅動中增加異步通知180
11.2.2 在用戶空間驗證virtualfifo的異步通知182
第12章 Linux塊設備驅動184
12.1 塊設備的I/O操作特點184
12.2 Linux塊設備驅動結構184
12.2.1 block_device_operations結構體184
12.2.2 gendisk結構體186
12.2.3 request與bio結構體188
12.2.4 塊設備驅動註冊與註銷197
12.3 Linux塊設備驅動的模組載入與卸載198
12.4 塊設備的打開/釋放/IOCTL200
第13章 Linux網路設備驅動202
13.1 Linux網路設備驅動體系結構202
13.2 Linux網路設備驅動結構203
13.3 Linux網路設備驅動I/O實現204
13.3.1 網路設備初始化204
13.3.2 網路數據包的收發205
第三篇 實踐出真知——Android驅動實踐篇
第14章 AndroidHAL層的設計208
14.1 AndroidHAL概述208
14.2 為Android開發虛擬驅動virtualio209
14.3 Android集成C程式訪問virtualio220
14.4 Android通過HAL訪問virtualio222
14.4.1 virtualioHAL模組實現222
14.4.2 實現訪問virtualioHAL模組JNI226
14.4.3 在Framework層增加virtualio服務229
第15章 Framebuffer子系統231
15.1 LinuxFramebuffer一般子系統231
15.1.1 Framebuffer數據結構231
15.1.2 Framebuffer驅動237
15.2 AndroidFramebuffer子系統實踐238
15.2.1 硬體基礎238
15.2.2 CPU側顯示驅動模組240
15.2.3 LCM驅動模組242
15.3 Android系統對Framebuffer的使用247
第16章 Input子系統249
16.1 LinuxInput一般子系統249
16.1.1 Input數據結構250
16.1.2 Input核心模組252
16.2 AndroidInput子系統實踐257
16.2.1 硬體基礎258
16.2.2 Input驅動模組258
16.3 Android系統對Input的使用263
第17章 V4L2子系統266
17.1 LinuxV4L2一般子系統266
17.1.1 V4L2數據結構266
17.1.2 V4L2接口268
17.1.3 V4L2虛擬驅動vivi273
17.2 AndroidV4L2實踐279
17.2.1 硬體基礎280
17.2.2 CPU側CCIC驅動模組281
17.2.3 OV5642模組驅動模組283
17.3 Android系統對V4L2的使用286
第18章 BinderIPC通信子系統288
18.1 Binder驅動概述288
18.2 Binder通信模型288
18.3 Binder驅動291
18.3.1 Binder相關的結構體292
18.3.2 AndroidBinder子系統的架構設計292
18.4 Binder的工作流程293
第19章 USB子系統295
19.1 USB協定基礎知識295
19.1.1 USB物理連線295
19.1.2 USB通信協定297
19.2 USB子系統底層299
19.2.1 USBCore299
19.2.2 LinuxUSBgadget三層架構303
19.3 AndroidUSB子系統實踐305
19.3.1 AndroidIPC通信補充305
19.3.2 AndroidUSBMassStorage流程分析309
第20章 Bootloader引導子系統312
20.1 Bootloader流程分析312
20.1.1 Bootloader概述312
20.1.2 U—Boot啟動流程分析314
20.2 Bootloader修改指南317
20.2.1 開機第一幀圖的修改317
20.2.2 開機模式的定製318
參考文獻321