Android驅動開發權威指南 ( 簡體 字) |
作者:楊 柳 編著 | 類別:1. -> 程式設計 -> 手機程式 -> Android |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 38002 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:3/1/2014 |
頁數:320 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787111451822 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:Android開發的書籍比較多,但大多數或立足于Android的上層,講解如何開發Android應用,或偏重于Android Framework的繁雜機制,而缺乏講述Android驅動及具體實踐的書籍。由于工作的原因,本人正在根據多年Linux與Android驅動開發的經驗,整理相關的新員工培訓材料。為此,應張國強先生相邀,把相關資料整理成冊,以饗讀者,希望能讓讀者對Android有更深、更全面的理解,期待對從事Android驅動開發的工程人員的實際工作有所幫助。
我們知道Android底層是基于Linux內核的,因此要基于Android開發智能手機或終端,就少不了Linux內核與底層驅動的開發。據了解,這方面的開發人員目前還很缺乏,其中一個重要的原因就是Linux是一個與Windows一樣復雜的軟件系統,要理解它,本身不是一件容易的事,因此許多感興趣的讀者在翻閱相關書籍之后就知難而退了。根據個人的工作經驗,Linux內核和底層驅動的開發其實并沒有想象中的那么難,大概是相關書籍首先就講進程調度、信號同步等復雜技術,讓讀者立刻墜入云里霧里,特別是若沒弄明白設備驅動的本質,當真正講到相關驅動開發技術時,心氣已去了大半,更不用談利用所學的知識進行實踐了。
因此,我們在講述相關驅動開發基礎知識前,先讓大家初步了解Linux內核,再著手講設備輸入/輸出(I/O),接著由設備I/O引入DMA與中斷處理,再講驅動的并發處理技術,最后才講設備驅動向上層提供的同步與異步訪問方法。以設備I/O本質為源,根據前后因果,一層一層向讀者展現設備驅動開發的核心技術。只有這樣,我們在編寫或修改相應的Android驅動時,采用相關的技術才會得心應手,所創建的驅動才能健壯地與原有驅動與系統融為一體。而且經過這樣一個學習與實踐過程,相信讀者對于基于Linux內核的Android會有更清楚的認識。
Android驅動開發是一門工程性很強的技術,因此本書從實際開發需要出發,同時反復強調動手實踐。另外,我們認為一個合格的Android驅動程序開發工程師,除了要會編寫驅動程序,向上層程序提供相應設備模塊功能外,還應會編寫DVT(Design Verify Test)測試程序,以驗證所創建的驅動程序。因此在第三篇“Android驅動實踐篇”中,除了講解Android驅動開發原理,還講解了Android HAL等與Android驅動緊密相關的中間層知識;在講述具體Android設備子系統時,從該子系統整體工作機制出發,力求讓讀者理解開發的驅動如何成為相關子系統的有機部分,為Android驅動開發人員提供驅動開發以及DVT測試程序開發指導。
通過本書的學習,讀者將對Android整體有更深且更全面的認識。至于Android APK等程序開發的具體知識,相關的書籍與互聯網上有很多資料,讀者可以在進行具體DVT之類開發時,查閱相關技術的資料。
眾所周知,驅動開發是與操作系統緊密相關的,因此Android驅動開發的工作應該屬于系統級工程師的任務,要求我們比Android應用等開發人員知識面更廣,這一點在本人編寫本書時感觸特別深。站在許多前輩的肩膀上,糅合了自己的經驗與理解,歷時8個月,終于成稿,心中依然忐忑。Android系統可謂博大精深,加上自己才疏智淺,書中難免存在缺點與漏洞,歡迎大家提出寶貴意見,并不吝賜教。
最后默默期許,有讀者贊一聲“這書對Android驅動開發還有些用”,本人則不勝感激與欣慰!當然,還要感謝張國強先生及我的家人,正是他們的支持與鼓勵,才得以讓我堅持并最終完成了這本書。同時,還要感謝網上不知名的“大牛們”給予的無私幫助,正是你們,讓我相信中國的嵌入式驅動工程師隊伍一定會強大。
本書內容安排
本書的內容被劃分為三篇,共20章。
第一篇是Android概述篇,講述了Android的來龍去脈、Android軟件體系結構。它包含了兩章內容:
第1章Android的前世今生,講述了Android的起源、現狀與發展。
第2章Android體系結構,講述了Android的4層軟件架構、源代碼目錄組織及其開發環境的搭建。
第二篇是Linux驅動基礎篇,講述了Linux內核基礎知識,以及Linux驅動開發的關鍵技術。它包含了11章內容:
第3章Linux內核綜述,講述了Linux OS基本概念、進程管理、內存管理與文件系統。
第4章Linux內核編程與內核模塊,講述了Linux內核模塊模型、內核模塊編程,以及Linux內核源碼組織與編譯。
第5章Linux文件系統,根據Linux“一切皆文件”的核心要旨,著重講解了文件系統,特別是與設備驅動緊密相關的設備文件系統。
第6章Linux字符設備驅動,講述了字符設備驅動程序結構,并實現了一個虛擬化的字符設備,最后講解了如何通過設備文件名和設備驅動程序來訪問設備。
第7章Linux設備驅動中的內存與I/O訪問,講述了Linux設備驅動通過內存映射或分配I/O地址,實現對設備訪問的基礎原理。
第8章Linux設備驅動中的中斷,講述了Linux驅動的主處理流程與中斷處理異步機制,以及中斷響應與定時器技術。
第9章Linux設備驅動中的并發,講述Linux驅動中并發訪問存在的原因,以及解決并發競爭的同步訪問技術。
第10章Linux設備的阻塞式與非阻塞式訪問,講述了Linux向上層應用提供的阻塞式與非阻塞式兩類同步訪問設備模式,以及所要提供的相關支撐技術。
第11章Linux設備驅動中的異步訪問,講述了Linux向上層應用提供的非同步(即異步)訪問設備模式,以及Linux所要提供的相關支撐技術。
第12章Linux塊設備驅動,講述了Linux塊設備的I/O操作與字符設備的不同之處、塊設備驅動結構,以及關于塊設備驅動的相關支撐技術。
第13章Linux網絡設備驅動,講述了Linux網絡設備驅動架構體系、該類設備驅動結構,以及針對該類設備的I/O實現。
第三篇是Android驅動實踐篇,講述了Android HAL等Android驅動開發專有基礎知識,以及若干個實踐著Linux驅動的Android功能子系統,為Android驅動開發提供具體的幫助與指導。它包含了7章內容:
第14章Android HAL層的設計,講述了Android HAL層工作原理,并以虛擬驅動為例,列舉了針對具體驅動實現HAL層的實例。
第15章Framebuffer子系統,講述了Android基于Framebuffer實現顯示輸出的工作機理;從開發實踐出發,描述了Android Framebuffer子系統中經常遇到的相關硬件和相關驅動開發;還從系統角度講解了所開發的Framebuffer驅動如何與Android Framebuffer子系統融為一體,為Android用戶提供所需的顯示輸出服務。
第16章Input子系統,講述了Android Input子系統的工作機理;從開發實踐出發,以擴展鍵盤驅動為例,描述了Android Input子系統中相應驅動的開發;還從系統角度講解了鍵盤等Input類驅動如何與Android Input子系統融為一體,為Android用戶提供所需的輸入服務。
第17章V4L2子系統,講述了Android V4L2子系統的工作機理;從開發實踐出發,以OV5642 Camera驅動為例,講述了Android V4L2子系統中相應驅動的開發;還從系統角度講解了Camera等V4L2驅動如何與V4L2子系統融為一體,為Android用戶提供拍照、錄像等多媒體服務。
第18章Binder IPC通信子系統,講述了Android這個專有輕量級進程通信子系統的工作原理;描述了該子系統的Binder驅動底層支撐技術;還從系統的角度講解了Binder驅動如何與Binder IPC子系統融為一體,為Android中的應用、服務等進程提供進程間通信。
第19章USB子系統,講述了USB協議的基礎知識;描述了Android中USB底層驅動支撐技術;以USB Mass Storage為例,講解了USB驅動如何與USB子系統融為一體,為Android用戶提供USB相關服務。
第20章Bootloader引導子系統,講述了Bootloader的工作機理;從開發實踐出發,給出了若干Bootloader的修改指導。
本書特色
本書立足于Android驅動開發實踐,從開發者角度出發,主要有以下幾個特點:
實戰性強。體現在兩個方面,一是本書使用了大量的代碼和例子,其中有的代碼和例子稍做修改就可運用到具體的Android驅動開發中;二是講解相關技術內容時,處處站在開發者角度,整篇的編排都是根據作者多年開發經驗、從實戰出發合理組織的。
循序漸進。本書內容盡量由淺入深,逐層推進,力求讓稍有軟件和操作系統基礎的入門者也能看懂并能掌握相關的Android開發技術。
整體把握。本書始終強調避免將Android驅動與Android的其他組件部分割裂,而是從軟件工程系統的觀點,確保開發的驅動能成為Android的有機組成,為Android用戶提供實際的功能服務。 |
內容簡介:知道Android最底層是基于Linux內核的,因此要基于Android開發智能手機或終端,就少不了Linux內核與底層驅動的開發。據了解,這方面的開發人員目前還很缺乏,其中一個重要的原因就是Linux是一個與Windows一樣復雜的軟件系統,要理解它,這本身不是一件容易的事,因此許多感興趣的讀者在翻閱相關書籍之后就知難而退了。然而,很多資深驅動工程師認為Linux內核和底層驅動的開發其實并沒有想像中的那么難。大概是相關書籍首先就講進程調度、信號同步等復雜技術,讓讀者立刻墜入云里霧里,特別是沒弄明白設備驅動的本質,當真正講到相關驅動開發技術時,心氣已去了大半,更不用談利用所學的知識進行實踐了。 因此,本書在講述相關的驅動開發基礎知識時,先讓大家初步了解Linux內核,再著手講設備輸入/輸出(I/O),接著由設備I/O引入DMA與中斷處理,再講驅動的并發處理技術,最后才講設備驅動向上層提供的同步與異步訪問方法。以設備I/O本質為源,根據前后因果關系,一層一層向讀者展現設備驅動開發的核心技術。只有這樣,我們在編寫或修改相應的Android驅動時,采用相關的技術才會得心應手,所創建的驅動才能健壯地與原有驅動和系統融為一體。而且經過這樣一個學習與實踐過程,相信讀者對于基于Linux內核的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 一個字符設備驅動例子——virtualchar 77
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 內存管理單元MMU 93
7.2 Linux內存管理 97
7.3 Linux內存訪問 99
7.4 Linux I/O訪問 102
7.4.1 訪問I/O 102
7.4.2 申請與釋放I/O資源 105
7.4.3 I/O訪問流程 107
7.4.4 設備地址與用戶空間的映射 107
7.5 DMA 114
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 Linux 2.6 中的異步訪問 171
11.1.1 異步訪問概念與GNU C庫函數 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 塊設備的打開/釋放/IOCTL 200
第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章 Android HAL層的設計 208
14.1 Android HAL概述 208
14.2 為Android開發虛擬驅動virtualio 209
14.3 Android集成C程序訪問virtualio 220
14.4 Android通過HAL訪問virtualio 222
14.4.1 virtualio HAL模塊實現 222
14.4.2 實現訪問virtualio HAL模塊JNI 226
14.4.3 在Framework層增加virtualio服務 229
第15章 Framebuffer子系統 231
15.1 Linux Framebuffer一般子系統 231
15.1.1 Framebuffer數據結構 231
15.1.2 Framebuffer驅動 237
15.2 Android Framebuffer子系統實踐 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 Linux Input一般子系統 249
16.1.1 Input數據結構 250
16.1.2 Input內核模塊 252
16.2 Android Input子系統實踐 257
16.2.1 硬件基礎 258
16.2.2 Input驅動模塊 258
16.3 Android系統對Input的使用 263
第17章 V4L2子系統 266
17.1 Linux V4L2一般子系統 266
17.1.1 V4L2數據結構 266
17.1.2 V4L2接口 268
17.1.3 V4L2虛擬驅動vivi 273
17.2 Android V4L2實踐 279
17.2.1 硬件基礎 280
17.2.2 CPU側CCIC驅動模塊 281
17.2.3 OV5642模組驅動模塊 283
17.3 Android系統對V4L2的使用 286
第18章 Binder IPC通信子系統 288
18.1 Binder驅動概述 288
18.2 Binder通信模型 288
18.3 Binder驅動 291
18.3.1 Binder相關的結構體 292
18.3.2 Android Binder子系統的架構設計 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 USB Core 299
19.2.2 Linux USB gadget三層架構 303
19.3 Android USB子系統實踐 305
19.3.1 Android IPC通信補充 305
19.3.2 Android USB Mass Storage流程分析 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 |
序: |