出版時間:2012-8 出版社:電子工業(yè)出版社 作者:王振麗
Tag標(biāo)簽:無
內(nèi)容概要
本書從底層原理開始講起,結(jié)合真實(shí)的案例向讀者詳細(xì)介紹了Android內(nèi)核、移植和驅(qū)動開發(fā)的整個流程。全書分為19章,依次講解驅(qū)動移植的必要性,何為HAL層深入分析,Goldfish、MSM、MAP內(nèi)核和驅(qū)動解析,顯示系統(tǒng)、輸入系統(tǒng)、振動器系統(tǒng)、音頻系統(tǒng)、視頻輸出系統(tǒng)的驅(qū)動,OpenMax多媒體、多媒體插件框架,傳感器、照相機(jī)、Wi-Fi、藍(lán)牙、GPS和電話系統(tǒng)等。在每一章中,重點(diǎn)介紹了與Android驅(qū)動開發(fā)相關(guān)的底層知識,并對Android源代碼進(jìn)行了剖析。
書籍目錄
第1章 Android底層開發(fā)基礎(chǔ)1
1.1 什么是驅(qū)動1
1.1.1 驅(qū)動程序的魅力1
1.1.2 電腦中的驅(qū)動2
1.1.3 手機(jī)中的驅(qū)動程序2
1.2 開源還是不開源的問題3
1.2.1 霧里看花的開源3
1.2.2 從為什么選擇Java談為什么不
開源驅(qū)動程序3
1.2.3 對驅(qū)動開發(fā)者來說是一把雙刃劍4
1.3 Android和Linux4
1.3.1 Linux簡介5
1.3.2 Android和Linux的關(guān)系5
1.4 簡析Linux內(nèi)核8
1.4.1 內(nèi)核的體系結(jié)構(gòu)8
1.4.2 和Android密切相關(guān)的Linux
內(nèi)核知識10
1.5 分析Linux內(nèi)核源代碼很有必要14
1.5.1 源代碼目錄結(jié)構(gòu)14
1.5.2 瀏覽源代碼的工具16
1.5.3 為什么用匯編語言編寫內(nèi)核
代碼17
1.5.4 Linux內(nèi)核的顯著特性18
1.5.5 學(xué)習(xí)Linux內(nèi)核的方法26
第2章 分析Android源代碼31
2.1 搭建Linux開發(fā)環(huán)境和工具31
2.1.1 搭建Linux開發(fā)環(huán)境31
2.1.2 設(shè)置環(huán)境變量32
2.1.3 安裝編譯工具32
2.2 獲取Android源代碼33
2.3 分析并編譯Android源代碼35
2.3.1 Android源代碼的結(jié)構(gòu)35
2.3.2 編譯Android源代碼40
2.3.3 運(yùn)行Android源代碼42
2.3.4 實(shí)踐演練——演示編譯Android
程序的兩種方法43
2.4 編譯Android Kernel47
2.4.1 獲取Goldfish內(nèi)核代碼47
2.4.2 獲取MSM內(nèi)核代碼50
2.4.3 獲取OMAP內(nèi)核代碼50
2.4.4 編譯Android的Linux內(nèi)核50
2.5 運(yùn)行模擬器52
2.5.1 Linux環(huán)境下運(yùn)行模擬器的方法53
2.5.2 模擬器輔助工具——adb54
第3章 驅(qū)動需要移植57
3.1 驅(qū)動開發(fā)需要做的工作57
3.2 Android移植59
3.2.1 移植的任務(wù)60
3.2.2 移植的內(nèi)容60
3.2.3 驅(qū)動開發(fā)需要做的工作61
3.3 Android對Linux的改造61
3.3.1 Android對Linux內(nèi)核文件的
改動62
3.3.2 為Android構(gòu)建 Linux的操作
系統(tǒng)63
3.4 內(nèi)核空間和用戶空間接口是一
個媒介64
3.4.1 內(nèi)核空間和用戶空間的相互
作用64
3.4.2 系統(tǒng)和硬件之間的交互64
3.4.3 使用Relay實(shí)現(xiàn)內(nèi)核到用戶空
間的數(shù)據(jù)傳輸66
3.5 三類驅(qū)動程序70
3.5.1 字符設(shè)備驅(qū)動程序70
3.5.2 塊設(shè)備驅(qū)動程序79
3.5.3 網(wǎng)絡(luò)設(shè)備驅(qū)動程序82
第4章 HAL層深入分析84
4.1 認(rèn)識HAL層84
4.1.1 HAL層的發(fā)展84
4.1.2 過去和現(xiàn)在的區(qū)別86
4.2 分析HAL層源代碼86
4.2.1 分析HAL moudle86
4.2.2 分析mokoid工程89
4.3 總結(jié)HAL層的使用方法98
4.4 傳感器在HAL層的表現(xiàn)101
4.4.1 HAL層的Sensor代碼102
4.4.2 總結(jié)Sensor編程的流程104
4.4.3 分析Sensor源代碼看Android
API 與硬件平臺的銜接104
4.5 移植總結(jié)116
4.5.1 移植各個Android部件的方式116
4.5.2 移植技巧之一——不得不說的
輔助工作117
第5章 Goldfish下的驅(qū)動解析125
5.1 staging驅(qū)動125
5.1.1 staging驅(qū)動概述125
5.1.2 Binder驅(qū)動程序126
5.1.3 Logger驅(qū)動程序135
5.1.4 Lowmemorykiller組件136
5.1.5 Timed Output驅(qū)動程序137
5.1.6 Timed Gpio驅(qū)動程序139
5.1.7 Ram Console驅(qū)動程序139
5.2 wakelock和early_suspend140
5.2.1 wakelock和early_suspend的
原理140
5.2.2 Android休眠141
5.2.3 Android喚醒144
5.3 Ashmem驅(qū)動程序145
5.4 Pmem驅(qū)動程序148
5.5 Alarm驅(qū)動程序149
5.5.1 Alarm簡析149
5.5.2 Alarm驅(qū)動程序的實(shí)現(xiàn)150
5.6 USB Gadget驅(qū)動程序151
5.7 Android Paranoid驅(qū)動程序153
5.8 Goldfish設(shè)備驅(qū)動154
5.8.1 FrameBuffer驅(qū)動155
5.8.2 鍵盤驅(qū)動159
5.8.3 實(shí)時時鐘驅(qū)動程序160
5.8.4 TTY終端驅(qū)動程序161
5.8.5 NandFlash驅(qū)動程序162
5.8.6 MMC驅(qū)動程序162
5.8.7 電池驅(qū)動程序162
第6章 MSM內(nèi)核和驅(qū)動解析164
6.1 MSM基礎(chǔ)164
6.1.1 常見MSM處理器產(chǎn)品164
6.1.2 Snapdragon內(nèi)核介紹165
6.2 移植MSM內(nèi)核簡介166
6.3 移植MSM168
6.3.1 Makefile文件168
6.3.2 驅(qū)動和組件170
6.3.3 設(shè)備驅(qū)動172
6.3.4 高通特有的組件174
第7章 OMAP內(nèi)核和驅(qū)動解析177
7.1 OMAP基礎(chǔ)177
7.1.1 OMAP簡析177
7.1.2 常見OMAP處理器產(chǎn)品177
7.1.3 開發(fā)平臺178
7.2 OMAP內(nèi)核178
7.3 移植OMAP體系結(jié)構(gòu)180
7.3.1 移植OMAP平臺180
7.3.2 移植OMAP處理器183
7.4 移植Android專用驅(qū)動和組件188
7.5 OMAP的設(shè)備驅(qū)動190
第8章 顯示系統(tǒng)驅(qū)動應(yīng)用195
8.1 顯示系統(tǒng)介紹195
8.1.1 Android的版本195
8.1.2 不同版本的顯示系統(tǒng)195
8.2 移植和調(diào)試前的準(zhǔn)備196
8.2.1 FrameBuffer驅(qū)動程序196
8.2.2 硬件抽象層198
8.3 實(shí)現(xiàn)顯示系統(tǒng)的驅(qū)動程序210
8.3.1 Goldfish中的FrameBuffer驅(qū)動
程序210
8.3.2 使用Gralloc模塊的驅(qū)動程序214
8.4 MSM高通處理器中的顯示驅(qū)動
實(shí)現(xiàn)224
8.4.1 MSM中的FrameBuffer驅(qū)動
程序225
8.4.2 MSM中的Gralloc驅(qū)動程序227
8.5 OMAP處理器中的顯示驅(qū)動實(shí)現(xiàn)235
第9章 輸入系統(tǒng)驅(qū)動應(yīng)用239
9.1 輸入系統(tǒng)介紹239
9.1.1 Android輸入系統(tǒng)結(jié)構(gòu)元素
介紹239
9.1.2 移植Android輸入系統(tǒng)時的
工作240
9.2 Input(輸入)驅(qū)動241
9.3 模擬器的輸入驅(qū)動256
9.4 MSM高通處理器中的輸入驅(qū)動
實(shí)現(xiàn)257
9.4.1 觸摸屏驅(qū)動257
9.4.2 按鍵和軌跡球驅(qū)動264
9.5 OMAP處理器平臺中的輸入驅(qū)
動實(shí)現(xiàn)266
9.5.1 觸摸屏驅(qū)動267
9.5.2 鍵盤驅(qū)動267
第10章 振動器系統(tǒng)驅(qū)動269
10.1 振動器系統(tǒng)結(jié)構(gòu)269
10.1.1 硬件抽象層271
10.1.2 JNI框架部分272
10.2 開始移植273
10.2.1 移植振動器驅(qū)動程序273
10.2.2 實(shí)現(xiàn)硬件抽象層274
10.3 在MSM平臺實(shí)現(xiàn)振動器驅(qū)動275
第11章 音頻系統(tǒng)驅(qū)動279
11.1 音頻系統(tǒng)結(jié)構(gòu)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)的必備技術(shù)289
11.3.1 移植Audio系統(tǒng)所要做的
工作289
11.3.2 分析硬件抽象層290
11.3.3 分析AudioFlinger中的Audio
硬件抽象層的實(shí)現(xiàn)291
11.4 真正實(shí)現(xiàn)Audio硬件抽象層298
11.5 MSM平臺實(shí)現(xiàn)Audio驅(qū)動系統(tǒng)298
11.5.1 實(shí)現(xiàn)Audio驅(qū)動程序298
11.5.2 實(shí)現(xiàn)硬件抽象層299
11.6 OSS平臺實(shí)現(xiàn)Audio驅(qū)動系統(tǒng)304
11.6.1 OSS驅(qū)動程序介紹304
11.6.2 mixer305
11.7 ALSA平臺實(shí)現(xiàn)Audio系統(tǒng)312
11.7.1 注冊音頻設(shè)備和音頻驅(qū)動312
11.7.2 在Android中使用ALSA
聲卡313
11.7.3 在OMAP平臺移植Android
的ALSA聲卡驅(qū)動322
第12章 視頻輸出系統(tǒng)驅(qū)動326
12.1 視頻輸出系統(tǒng)結(jié)構(gòu)326
12.2 需要移植的部分328
12.3 分析硬件抽象層328
12.3.1 Overlay系統(tǒng)硬件抽象層的
接口328
12.3.2 實(shí)現(xiàn)Overlay系統(tǒng)的硬件抽
象層331
12.3.3 實(shí)現(xiàn)接口3
章節(jié)摘錄
版權(quán)頁: 插圖: Wi—Fi系統(tǒng)Java層的核心是根據(jù)IWifiManger接口所創(chuàng)建的Binder服務(wù)器端和客戶端,服務(wù)器端是WifiService,客戶端是WifiManger。 編譯IWiflManger.aidl生成文件IWiflManger.java,并生成IWifiManger.Stub(服務(wù)器端抽象類)和IWifiManger.Stub.Proxy(客戶端代理實(shí)現(xiàn)類)。WifiService通過繼承IWifiManger.Stub實(shí)現(xiàn),而客戶端通過9etService()函數(shù)獲取IWifiManger.Stub.Proxy(即Service的代理類),將其作為參數(shù)傳遞給WifiManger,供其與WifiService通信時使用。 Wi—Fi系統(tǒng)Java部分的核心是根據(jù)IWifiManager接口所創(chuàng)建的Binder服務(wù)器端和客戶端,服務(wù)器端是WifiService,客戶端是WifiManager。具體結(jié)構(gòu)如圖17—4所示。 圖17—4中主要構(gòu)成元素的具體說明如下所示。 (1)WiFiManger是Wi—Fi部分與外界的接口,用戶通過它來訪問Wi—Fi的核心功能。WifiWatchdogService這一系統(tǒng)組件也是用WifiManger來執(zhí)行一些具體操作。 (2)WifiService是服務(wù)器端的實(shí)現(xiàn),作為Wi—Fi的核心,處理實(shí)際的驅(qū)動加載、掃描、鏈接/斷開等命令,以及底層上報的事件。,對于主動的命令控制,Wi—Fi是一個簡單的封裝,針對來自客戶端的控制命令,調(diào)用相應(yīng)的WifiNative底層實(shí)現(xiàn)。 當(dāng)接收到客戶端的命令后,一般會將其轉(zhuǎn)換成對應(yīng)的自身消息塞入消息隊(duì)列中,以便客戶端的調(diào)用可以及時返回,然后在WifiHandler的handleMessage()中處理對應(yīng)的消息。而底層上報的事件,WifiService則通過啟動WifiStateTracker來負(fù)責(zé)處理。WifiStateTracker和wifiMonitor的具體功能如下所示。 WifiStateTracker除了負(fù)責(zé)WiFi的電源管理模式等功能外,其核心是WifiMonitor所實(shí)現(xiàn)的事件輪詢機(jī)制,以及消息處理函數(shù)handleMessage()。 WifLMonitor通過開啟一個MonitorThread來實(shí)現(xiàn)事件的輪詢,輪詢的關(guān)鍵函數(shù)是前面提到的阻塞式函數(shù)WifiNative.waitForEvent()。獲取事件后,WifiMonitor通過一系列的Handler通知給WifiStateTracker。這里WifiMonitor的通知機(jī)制是將底層事件轉(zhuǎn)換成WifiStateTracker所能識別的消息,塞入WifiStateTracker的消息循環(huán)中,最終在handleMessage()中由WifiStateTracker完成對應(yīng)的處理。
編輯推薦
《Android底層開發(fā)技術(shù)實(shí)戰(zhàn)詳解:內(nèi)核、移植和驅(qū)動》適合Android研發(fā)人員及Android愛好者學(xué)習(xí),也可以作為相關(guān)培訓(xùn)學(xué)校和大專院校相關(guān)專業(yè)的教學(xué)用書。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載
Android底層開發(fā)技術(shù)實(shí)戰(zhàn)詳解 PDF格式下載