Android板級支持與硬件相關子系統 ( 簡體 字) |
作者:韓超 等 | 類別:1. -> 程式設計 -> 手機程式 -> Android |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 36625 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:10/1/2013 |
頁數:420 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787121213489 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:開發者的需要 Android系統已經推出了將近5個年頭了,從1.0版本一直到本書寫作時的4.2版本。作為其載體的硬件也經過了多次升級。到今天,Android設備已經成為硬件的集大成者。硬件方面的開發一直是開發的難點,凡是一個完整Android設備的開發者,無論處于產業鏈的哪一個階段,都不可避免地要處理與硬件相關的問題。 Android的開發者通常面對幾個方面的難點: Android系統的代碼龐大,難以把握硬件相關的調試思路。 不清楚軟件和硬件之間的直接關系。 對某個硬件平臺的知識和經驗不適用于其他硬件平臺。 Android系統的版本升級過程中,硬件相關的部分常常發生重大變動。 另外一個客觀的情況是,目前一般處理器或者基本硬件平臺的BSP(Board Support Package,板級支持包)部分都是由芯片的廠商統一完成的,并且已經趨近于成熟。因此,開發者的主要工作不再是構建完整的BSP,而是調試和修改現有的BSP。 本書特色 本書的目的是要為開發者提供切實有效的幫助。針對開發者的現實情況,本書主要具有以下幾個特點: 用框圖描述每一個硬件相關子系統的結構,并區分BSP部分和公用部分。 選用多個流行的硬件平臺,對比其中不同的實現和相同的理念。 對比Android 2.3和Android 4.x的實現,展示硬件相關部分的升級。 對龐大的系統去耦合,展示Android一些原始的核心設計思路。 列出每一個部分相關的代碼路徑。 簡要列出代碼的關鍵部分。 根據實際經驗編寫,工程性強。 通過對每一個子系統的學習,讀者可以了解現有Android系統的結構,經過深入理解后,可以明白Android系統的設計思路。學習后,如果要在系統中增加一個新的非標準硬件,讀者也能比較容易地完成。 本書特別選定了Nexus One、Nexus S、Galaxy Nexus等幾款手機作為參考平臺。其中一個很大的優點就是以上幾個平臺都是Google認定的,具有典型性,并且它們從內核到Android系統的代碼都是開源的,讀者可以很容易獲得。雖然以上幾個硬件平臺不是最新的,但是根據嵌入式SOC的特點,高通的處理器都與Nexus One的QSD 8x處理器類似,三星的處理器都與Nexus S的Exynos處理器類似,德州儀器的處理器都與Galaxy Nexus 的OMAP處理器類似。因此,這樣的選擇既方便又具有廣泛的適應性,當讀者熟悉了這幾個硬件平臺后,置于Marvel、Freescale和NVidia等公司的平臺可以實現融會貫通。 Android系統可以被視為一個功能完備的機器人。其中與硬件相關的BSP部分,則是這個機器人的根基和經脈,雖然占的比重不大,卻是系統的關鍵所在。 本書的理念可以用下面的圖來表示。 本書內容 本書提供了系統化的Android系統的開發知識,以硬件相關的子系統為核心,主要包括以下幾個方面的內容: 硬件相關的子系統的特點。 幾個不同的硬件平臺的Linux內核結構。 每個子系統的總體結構和BSP結構。 每個子系統的BSP的實現要點。 具體硬件在Linux內核與Android硬件抽象層相關的實現。 人的知識和經驗本身是網狀結構,各部分相互關聯,錯綜復雜。但是作為出版的書籍,則必須將其串行成章節的形式,本書總體上是以橫向結構來進行組織的,大部分章節是針對每一個硬件相關子系統的描述,每一章的組織結構也比較類似。 本書讀者 本書適用于各類Android技術群體,也適用于嵌入式Linux的技術人員了解實際系統。作者對讀者有以下幾個方面的建議: 根據書中提供的知識和經驗,對照Android的源代碼,有相應的Android設備,這三者的結合是最理想的學習環境。 要首先理解宏觀結構,再研究細枝末節,硬件相關子系統的很多代碼并非在任何情況下都會適用,讀者需要了解其適用的場景。 BSP部分的開發偏重下層,讀者不要過于依賴界面,而要習慣查看系統日志,從Linux系統標準的設備和特殊文件系統中獲取信息,并使用各種命令行工具調試。 硬件抽象層的目的是為了適配各種硬件,很多程序的結構看似冗余,卻正是BSP設計的精華所在,這也是讀者需要關注的內容。 夯實Linux的基礎對Android開發也非常重要,對Android的BSP開發尤為重要。 在開發的過程中,可能用到很多不同的硬件平臺,要根據本書的思路掌握查看硬件信息和硬件相關代碼的方法。 本書作者 本書的規劃和統籌由中國大陸的韓超完成,韓超在Linux和Android領域具有豐富的一線開發經驗。本書內容來源于工作在不同領域的開發者多年的經驗。韓超完成了本書內容的主要部分,眾多不同規模的企業開發成果也為本書的編寫提供了重要的素材。參與本書編寫的還有崔海斌、于仕林、張宇、張超、趙家維、黃亮、沈楨、徐威特、楊鈺、馬若劼、曹道剛、梁泉等。 |
內容簡介:本書以硬件相關的子系統為核心,提供具有完整知識體系Android系統級的開發知識。本書選定了幾個流行的硬件作為參考平臺,讀者可以很容易地得到硬件和開源代碼。本書突出了硬件相關的子系統的特點,展示了幾個不同的硬件平臺的內核結構,介紹了每個子系統的總體結構和BSP結構、每個子系統的BSP的實現要點,以及具體硬件在Linux內核與Android硬件抽象層相關的實現。 |
目錄:第1章 Android的BSP和子系統開發 1 1.1 Android板級支持工作概述 1 1.1.1 Android的開放源 代碼工程和BSP 1 1.1.2 Android的系統結構 1 1.2 Android的開發環境和源代碼 2 1.2.1 Android的開發環境 2 1.2.2 源代碼倉庫 3 1.3 BSP模塊和相關子系統 5 1.3.1 Android的BSP 5 1.3.2 BSP和硬件相關子系統 6 1.3.3 不同類型的Android設備 7 第2章 Android系統BSP部分工作 8 2.1 Android的BSP部分 工作概述 8 2.2 BSP的全局部分 8 2.2.1 源代碼工程板級別 支持部分 9 2.2.2 硬件相關的代碼改動 11 2.3 Android的Linux操作系統 14 2.3.1 Android中的Linux操作 系統的特定內容 14 2.3.2 Android的Linux的 基本支持 15 2.3.3 Android各個硬件設備的 驅動程序 16 2.4 Android的硬件抽象層 17 2.4.1 硬件抽象層的地位和功能 17 2.4.2 硬件抽象層接口方式 18 2.5 各個子系統的移植方式 22 2.5.1 Android 2.3中的實現方式 22 2.5.2 Android 2.2及之前的 實現方式 23 2.5.3 Android 4.x中的實現方式 24 2.6 與硬件抽象層相關的 框架層目錄 24 2.6.1 一直保持不變的代碼 24 2.6.2 框架層的本地代碼 24 2.6.3 音頻視頻相關的代碼 25 第3章 Android的Linux內核和驅動 26 3.1 Android的Linux內核概述 26 3.1.1 幾個內核工程 26 3.1.2 內核工程的編譯工具鏈 26 3.1.3 用戶空間關注的內容 27 3.2 Android專用驅動和組件 27 3.2.1 電源管理部分 27 3.2.2 staging中的組件和 驅動程序 28 3.2.3 幾個主要核心模塊 32 3.2.4 輔助的模塊和改動 35 3.3 goldfish平臺的內核和驅動 37 3.3.1 goldfish平臺和內核概述 37 3.3.2 goldfish體系結構移植 38 3.3.3 goldfish的相關設備驅動 40 3.4 高通MSM平臺的 內核和驅動 42 3.4.1 平臺概述 42 3.4.2 體系結構移植 43 3.4.3 設備驅動程序 43 3.5 三星平臺的內核和驅動 44 3.5.1 平臺概述 44 3.5.2 體系結構移植 45 3.5.3 驅動程序部分 45 3.6 德州儀器OMAP平臺的 內核和驅動 46 3.6.1 平臺概述 46 3.6.2 體系結構移植 47 3.6.3 驅動程序部分 47 第4章 顯示系統 49 4.1 顯示系統概述 49 4.2 顯示子系統結構 50 4.2.1 總體結構 50 4.2.2 核心結構和UI庫 51 4.2.3 Surface本地部分 54 4.2.4 Java層的Surface的處理 56 4.3 顯示BSP的結構 57 4.3.1 Framebuffer驅動程序 57 4.3.2 gralloc硬件抽象層 59 4.4 顯示BSP的實現 61 4.4.1 模擬器顯示系統的實現 61 4.4.2 Nexus One系統的實現 68 4.4.3 Nexus S系統的實現 72 4.4.4 Galaxy Nexus系統的實現 73 第5章 用戶輸入系統 75 5.1 用戶輸入系統概述 75 5.2 Android 2.3用戶輸入子系統 76 5.2.1 總體結構 76 5.2.2 本地框架的幾個部分 77 5.2.3 JNI 80 5.2.4 Java層的部分 81 5.3 Android 4.2的用戶輸入 子系統結構 81 5.3.1 總體結構 81 5.3.2 InputManagerService的 實現 82 5.4 用戶輸入BSP的結構 84 5.4.1 Input驅動程序 84 5.4.2 輸入配置文件 87 5.5 用戶輸入BSP的實現 89 5.5.1 模擬器中的實現 89 5.5.2 Nexus One系統中的實現 90 5.5.3 Nexus S系統中的實現 93 5.5.4 Galaxy Nexus系統中的 實現 94 第6章 傳感器系統 96 6.1 傳感器系統概述 96 6.2 傳感器子系統的結構 97 6.2.1 總體結構 97 6.2.2 本地框架層 98 6.2.3 傳感器系統的JNI 99 6.2.4 傳感器系統的Java層 100 6.3 傳感器BSP的結構 101 6.3.1 驅動程序 101 6.3.2 硬件抽象層的內容 102 6.4 傳感器BSP的實現 104 6.4.1 仿真器的實現 104 6.4.2 Nexus One系統實現 106 6.4.3 Nexus S系統實現 107 6.4.4 Galaxy Nexus系統實現 109 第7章 音頻系統 111 7.1 音頻系統概述 111 7.2 音頻子系統結構 112 7.2.1 總體結構 112 7.2.2 Audio的本地框架層 113 7.2.3 Audio系統的JNI和 Java層 114 7.3 音頻BSP的結構 116 7.3.1 Audio驅動程序 116 7.3.2 硬件抽象層的內容 120 7.4 音頻BSP的實現 124 7.4.1 通用的Audio系統實現 124 7.4.2 基于OSS的實現方式 129 7.4.3 基于ALSA的實現方式 130 7.4.4 MSM平臺和Nexus One 系統的實現 132 7.4.5 Nexus S系統的實現 137 第8章 視頻疊加輸出系統 140 8.1 視頻疊加輸出系統概述 140 8.2 視頻輸出子系統的結構 141 8.2.1 Overlay系統的結構 141 8.2.2 本地框架層 142 8.3 視頻疊加輸出BSP結構 144 8.3.1 移植的內容 144 8.3.2 驅動程序 144 8.3.3 硬件抽象層的內容 144 8.3.4 視頻輸出的調用者 146 8.3.5 使用Overlay的 數據流情況 148 8.4 視頻輸出BSP的實現 149 8.4.1 骨架實現 149 8.4.2 OMAP系統的實現 151 8.4.3 Nexus S系統的實現 156 第9章 照相機系統 159 9.1 照相機系統概述 159 9.2 照相機子系統的結構 160 9.2.1 照相機系統的結構 160 9.2.2 Camera的本地層 161 9.2.3 Camera的JNI和Java層 165 9.3 照相機BSP的結構 166 9.3.1 移植的內容 166 9.3.2 Video for 4 Linux 驅動程序 166 9.3.3 硬件抽象層的內容 168 9.3.4 照相機系統上下層的 關系 173 9.4 照相機BSP的實現 175 9.4.1 樁實現 175 9.4.2 Nexus One系統的Camera 實現 178 9.4.3 Nexus S系統的Camera 實現 180 第10章 OpenGL 3D引擎 184 10.1 OpenGL系統概述 184 10.2 OpenGL系統的結構 184 10.2.1 OpenGL和OpenGL ES的 標準結構 184 10.2.2 總體結構 186 10.2.3 OpenGL庫的調用者 188 10.3 OpenGL BSP的結構 190 10.3.1 移植的內容 190 10.3.2 OpenGL移植層的接口 190 10.3.3 OpenGL的調用和測試 192 10.4 OpenGL BSP的實現 193 10.4.1 Android軟件OpenGL的 實現 193 10.4.2 Nexus One系統的實現 195 10.4.3 Nexus S系統的實現 195 10.4.4 Galaxy Nexus系統的 實現 196 第11章 OpenMax引擎 197 11.1 OpenMax系統概述 197 11.2 OpenMax子系統結構 197 11.2.1 OpenMax系統的結構 197 11.2.2 Android中OpenMax的 適配層 201 11.3 OpenMax BSP的結構 203 11.3.1 OpenMax IL層的接口 203 11.3.2 Android的OpenMax 207 11.4 OpenMax BSP的實現 207 11.4.1 OpenMax IL實現的內容 207 11.4.2 OMAP3的OpenMax IL 實現的結構和機制 208 11.4.3 OMAP4的OpenMax IL 實現 213 第12章 位塊復制 216 12.1 位塊復制概述 216 12.2 位塊復制子系統結構 216 12.2.1 總體結構 216 12.2.2 copybit的調用者 217 12.3 位塊復制BSP的結構 218 12.3.1 驅動程序 218 12.3.2 硬件抽象層的接口 218 12.3.3 實現硬件抽象層 220 12.4 位塊復制的實現 220 第13章 無線局域網系統 223 13.1 無線局域網系統概述 223 13.2 無線局域網子系統的結構 223 13.2.1 總體的結構 223 13.2.2 wpa_supplicant工程 225 13.2.3 WiFi本地適配庫 227 13.2.4 WiFi的JNI部分 228 13.2.5 WiFi的Java層 228 13.3 無線局域網BSP的結構 229 13.3.1 協議和驅動程序 229 13.3.2 用戶空間的內容 230 13.4 無線局域網BSP的實現 231 13.4.1 基于BCM4329的方案 (Nexus One和Nexus S) 231 13.4.2 OMAP平臺的一個 典型實現 232 13.4.3 Galaxy Nexus的實現 234 第14章 藍牙系統 237 14.1 藍牙系統概述 237 14.2 藍牙子系統的結構 237 14.2.1 藍牙系統的結構 237 14.2.2 BlueZ 239 14.2.3 bluedroid庫 241 14.2.4 藍牙的JNI部分 241 14.2.5 藍牙的Java部分 242 14.3 BSP的結構 243 14.3.1 協議和驅動程序 244 14.3.2 本地代碼的配置部分 245 14.4 Android 4.2的藍牙系統 246 14.4.1 系統結構 246 14.4.2 藍牙硬件模塊 246 14.4.3 藍牙系統的本地層部分 252 14.4.4 BlueTooth包 252 14.5 BSP的實現 253 14.5.1 Nexus One系統的 藍牙實現 253 14.5.2 Nexus S系統的 藍牙實現 254 14.5.3 Galaxy Nexus系統的 藍牙實現 255 第15章 定位系統 257 15.1 定位系統的概述 257 15.2 定位子系統的結構 257 15.2.1 總體結構 257 15.2.2 JNI部分 259 15.2.3 Java部分 260 15.3 定位BSP的結構 263 15.3.1 驅動程序 263 15.3.2 硬件抽象層的接口 264 15.3.3 實現硬件抽象層 266 15.4 定位BSP的實現 266 15.4.1 仿真器的GPS實現 266 15.4.2 Nexus One系統的實現 268 15.4.3 Nexus S系統的實現 269 15.4.4 Galaxy Nexus系統的 實現 270 第16章 電話系統 271 16.1 電話系統概述 271 16.2 電話子系統的結構 271 16.2.1 總體結構 271 16.2.2 rild層 273 16.2.3 Java層中的電話部分 275 16.3 電話BSP的結構 278 16.3.1 驅動程序 278 16.3.2 RIL實現庫接口 (作為硬件抽象層) 280 16.4 電話BSP部分的實現 281 16.4.1 RIL的參考實現 281 16.4.2 數據連接部分 287 16.4.3 Mock RIL 288 第17章 警報器—實時時鐘系統 290 17.1 警報器—實時時鐘系統 290 17.2 警報器—實時時鐘子 系統的結構 290 17.2.1 總體結構 290 17.2.2 JNI部分 291 17.2.3 Java部分 292 17.2.4 Android系統時間 方面的調用 292 17.3 警報器—實時時鐘 BSP部分的結構 293 17.3.1 RTC驅動程序 293 17.3.2 Alarm驅動程序 294 17.4 警報器—實時時鐘 BSP部分的實現 295 17.4.1 模擬器環境中的實現 295 17.4.2 MSM平臺和Nexus One 系統的實現 295 17.4.3 Nexus S系統的實現 297 17.4.4 Galaxy Nexus系統的 實現 298 第18章 光系統 300 18.1 光系統概述 300 18.2 背光和指示燈子系統的 結構 300 18.2.1 總體結構 300 18.2.2 JNI部分 301 18.2.3 Java服務部分和 調用部分 302 18.3 背光和指示燈 BSP部分的結構 303 18.3.1 驅動程序 303 18.3.2 硬件抽象層的內容 304 18.4 背光和指示燈 BSP部分的實現 305 18.4.1 Nexus One系統的實現 305 18.4.2 Nexus S系統的實現 307 18.4.3 Galaxy Nexus 系統的 實現 308 第19章 振動器系統 311 19.1 振動器系統概述 311 19.2 振動器子系統的結構 311 19.2.1 振動器部分的結構 311 19.2.2 JNI部分 312 19.2.3 Java框架部分 313 19.3 振動器BSP部分的結構 313 19.3.1 驅動程序 313 19.3.2 硬件抽象層的內容 314 19.4 振動器BSP部分的實現 314 19.4.1 Nexus One系統的實現 315 19.4.2 Nexus S系統的實現 316 19.4.3 Galaxy Nexus 316 第20章 電池信息部分 318 20.1 電池信息部分 318 20.2 電池信息子系統的結構 318 20.2.1 電池系統部分的結構 318 20.2.2 JNI部分 319 20.2.3 Java部分 321 20.3 電池信息BSP部分的結構 321 20.4 電池信息BSP部分的實現 322 20.4.1 模擬器中的實現 322 20.4.2 Nexus One 323 20.4.3 Nexus S 324 20.4.4 Galaxy Nexus 325 第21章 Android 4.x的音頻、 視頻系統 326 21.1 Android 4.x的音頻系統 326 21.1.1 音頻系統的結構 326 21.1.2 音頻框架層 327 21.1.3 音頻BSP部分結構 327 21.2 Android 4.x音頻的 BSP實現 330 21.2.1 主實現和策略實現 330 21.2.2 仿真器實現 330 21.2.3 A2DP實現 331 21.2.4 Galaxy Nexus的實現 332 21.3 Android 4.x照相機系統 336 21.3.1 照相機系統的結構 336 21.3.2 Camera的框架層 336 21.3.3 照相機BSP部分結構 339 21.4 Android 4.x照相機的 BSP實現 342 21.4.1 仿真器實現 342 21.4.2 Galaxy Nexus的實現 346 21.5 Android 4.x視頻組合系統 349 21.5.1 視頻組合系統結構 349 21.5.2 SurfaceFlinger對 視頻組合的使用 350 21.5.3 視頻組合BSP 部分結構 351 21.6 Android 4.x視頻組合的 BSP實現 352 21.6.1 默認實現 352 21.6.2 Galaxy Nexus的 視頻組合 352 第22章 Android 4.x近場通信系統 357 22.1 近場通信系統概述 357 22.2 近場通信子系統的結構 358 22.2.1 總體結構 358 22.2.2 NFC本地庫 359 22.2.3 Android框架層的NFC 相關內容 360 22.2.4 NFC包 361 22.3 近場通信BSP的結構 365 22.3.1 NFC-NCI接口 365 22.3.2 NFC接口 366 22.4 近場通信BSP的實現 366 22.4.1 NCI-NFC的樁實現 366 22.4.2 NFC的樁實現 366 22.4.3 Galaxy Nexus 的 NFC實現 367 第23章 Android 4.2的電源控制 368 23.1 電源控制 368 23.2 電源控制的結構 368 23.2.1 總體結構 368 23.2.2 電源控制的使用 368 23.3 電源控制BSP的結構 369 23.4 電源控制BSP的實現 369 23.4.1 通用的電源控制實現 369 23.4.2 Galaxy Nexus的 電源控制實現 370 第24章 本地時間 372 24.1 本地時間子系統結構 372 24.1.1 本地時間的結構 372 24.1.2 本地時間的使用 372 24.2 本地時間BSP的結構 373 24.3 本地時間BSP的實現 373 第25章 Android 4.2密鑰 375 25.1 密鑰概述 375 25.2 安全和密鑰子系統結構 376 25.2.1 安全和密鑰的總體結構 376 25.2.2 keystore守護進程 376 25.2.3 android.security的內容 377 25.3 密鑰的BSP部分的結構 379 25.4 密鑰的BSP實現 380 25.4.1 通用的軟件密鑰實現 380 25.4.2 Galaxy Nexus 的 密鑰實現 381 第26章 電源管理 384 26.1 Android電源管理 384 26.2 Android內核空間的 電源管理 385 26.2.1 總體結構 385 26.2.2 wakelock 386 26.2.3 wakelock的用戶空間 388 26.2.4 earlysuspend部分 389 26.2.5 其他 391 26.3 Android用戶空間的 電源管理 392 26.3.1 電源管理的本地庫 392 26.3.2 電源管理的JNI庫 393 26.3.3 電源管理的Java部分 393
26.4 電源管理的策略 394 26.4.1 驅動程序的變化 394 26.4.2 用戶空間的控制 396 第27章 恢復和升級 397 27.1 恢復和升級概述 397 27.1.1 Android的Recovery 系統的組成 397 27.1.2 Android的Recovery 系統的功能和運行流程 398 27.2 recovery系統 399 27.2.1 編譯系統 399 27.2.2 init.rc腳本 400 27.2.3 Recovery可執行程序和 相關的庫 401 27.3 Android系統交互的過程 405 27.3.1 Java部分 405 27.3.2 交互的場景 406 |
序: |