內容簡介
本書從底層原理開始講起,結合真實的案例向讀者詳細介紹了Android內核、移植和驅動開發的整個流程。全書分為21章,依次講解驅動移植的必要性, Goldfish、OMAP內核和驅動解析,顯示系統、輸入系統、振動器系統、音頻系統、視頻輸出系統的驅動,OpenMax多媒體和多媒體插件框架,傳感器,照相機,Wi-Fi,藍牙和GPS,USB Gadget驅動,Lights光系統和Battery電池系統等。在每一章中,重點介紹了與Android驅動開發相關的底層知識,并對Android源碼進行了剖析。
目錄
第1章 Android底層開發基礎
1.1 什么是驅動
1.1.1 驅動程序的魅力
1.1.2 手機中的驅動程序
1.2 開源還是不開源的問題
1.2.1 霧里看花的開源
1.2.2 從為什么選擇Java談為什么不開源驅動程序
1.2.3 對驅動開發者來說是一把雙刃劍
1.3 Android和Linux
1.3.1 Linux簡介
1.3.2 Android和Linux的關系
1.4 簡析Linux內核
1.4.1 內核的體系結構
1.4.2 和Android密切相關的Linux內核知識
1.5 分析Linux內核源代碼很有必要
1.5.1 源代碼目錄結構
1.5.2 Linux 3.10的特性
1.5.3 瀏覽源代碼的工具
1.5.4 為什么用匯編語言編寫內核代碼
1.5.5 Linux內核的顯著特性
1.5.6 學習Linux內核的方法
第2章 分析Android源代碼
2.1 搭建Linux開發環境和工具
2.1.1 搭建Linux開發環境
2.1.2 設置環境變量
2.1.3 安裝編譯工具
2.2 獲取Android源代碼
2.3 分析并編譯Android源代碼
2.3.1 Android源代碼的結構
2.3.2 編譯Android源代碼
2.3.3 運行Android源代碼
2.3.4 實踐演練――演示編譯Android程序的兩種方法
2.4 編譯Android Kernel
2.4.1 獲取Goldfish內核代碼
2.4.2 獲取MSM內核代碼
2.4.3 獲取OMAP內核代碼
2.4.4 編譯Android的Linux內核
2.5 運行模擬器
2.5.1 Linux環境下運行模擬器的方法
2.5.2 模擬器輔助工具――adb
第3章 驅動需要移植
3.1 驅動開發需要做的工作
3.2 Android移植
3.2.1 移植的任務
3.2.2 移植的內容
3.2.3 驅動開發的任務
3.3 Android對Linux的改造
3.3.1 Android對Linux內核文件的改動
3.3.2 為Android構建Linux的操作系統
3.4 內核空間和用戶空間接口是一個媒介
3.4.1 內核空間和用戶空間的相互作用
3.4.2 系統和硬件之間的交互
3.4.3 使用Relay實現內核到用戶空間的數據傳輸
3.5 三類驅動程序
3.5.1 字符設備驅動程序
3.5.2 塊設備驅動程序
3.5.3 網絡設備驅動程序
第4章 HAL層深入分析
4.1 認識HAL層
4.1.1 HAL層的發展
4.1.2 過去和現在的區別
4.2 分析HAL層源代碼
4.2.1 分析HAL moudle
4.2.2 分析mokoid工程
4.3 總結HAL層的使用方法
4.4 傳感器在HAL層的表現
4.4.1 HAL層的Sensor代碼
4.4.2 總結Sensor編程的流程
4.4.3 分析Sensor源代碼看Android API與硬件平臺的銜接
4.5 移植總結
4.5.1 移植各個Android部件的方式
4.5.2 移植技巧之一――不得不說的輔助工作
4.6 開發一個硬件驅動程序
4.6.1 源代碼文件wuming.h和
wuming.c
4.6.2 編譯配置處理
4.6.3 修改配置文件
4.6.4 驗證驅動程序
第5章 分析Goldfish內核系統
5.1 Android專有驅動介紹
5.2 Goldfish基礎
5.3 Android專用驅動簡介
5.3.1 Logger驅動介紹
5.3.2 Low Memory Killer組件介紹
5.3.3 Timed Output驅動介紹
5.3.4 Timed Gpio驅動介紹
5.3.5 Ram Console驅動介紹
5.4 Ashmem驅動介紹
5.5 Pmem驅動介紹
5.6 Alarm驅動程序
5.7 USB Gadget驅動程序
5.8 Paranoid驅動介紹
5.9 Goldfish的設備驅動
第6章 MSM內核和驅動解析
6.1 MSM基礎
6.1.1 常見MSM處理器產品
6.1.2 Snapdragon內核介紹
6.2 移植MSM內核簡介
6.3 移植MSM
6.3.1 Makefile文件
6.3.2 驅動和組件
6.3.3 設備驅動
6.3.4 高通特有的組件
第7章 OMAP內核和驅動解析
7.1 OMAP基礎
7.1.1 OMAP簡析
7.1.2 常見OMAP處理器產品
7.1.3 開發平臺
7.2 OMAP內核
7.3 移植OMAP體系結構
7.3.1 移植OMAP平臺
7.3.2 移植OMAP處理器
7.4 移植Android專用驅動和組件
7.5 OMAP的設備驅動
7.5.1 顯示驅動程序
7.5.2 I2C總線驅動程序
7.5.3 攝像頭和視頻輸出驅動程序
7.5.4 觸摸屏和鍵盤驅動程序
7.5.5 實時時鐘驅動程序
7.5.6 音頻驅動程序
7.5.7 藍牙驅動程序
第8章 顯示系統驅動應用
8.1 顯示系統介紹
8.2 分析內核層
8.2.1 分析接口文件fb.h
8.2.2 分析內核實現文件fbmem.c
8.3 分析硬件抽象層
8.3.1 分析頭文件
8.3.2 分析硬件幀緩沖區
8.3.3 實現緩沖區的分配
8.3.4 顯示緩沖映射
8.3.5 分析管理庫文件LayerBuffer.cpp
8.4 分析顯示系統的驅動程序
8.4.1 Goldfish中的FrameBuffer驅動程序
8.4.2 使用Gralloc模塊的驅動程序
8.4.3 分析MSM高通處理器中的顯示驅動實現
8.4.4 分析OMAP處理器中的顯示驅動實現
第9章 輸入系統驅動應用
9.1 輸入系統介紹
9.1.1 Android輸入系統結構元素介紹
9.1.2 移植Android輸入系統時的工作
9.2 分析Input(輸入)系統驅動
9.2.1 分析頭文件
9.2.2 分析核心文件input.c
9.2.3 分析event機制
9.3 分析硬件抽象層
9.3.1 分析文件KeycodeLabels.h
9.3.2 分析文件KeyCharacterMap.h
9.3.3 分析Kl格式文件
9.3.4 分析kcm格式文件
9.3.5 分析文件EventHub.cpp
第10章 振動器系統驅動
10.1 振動器系統結構
10.2 分析硬件抽象層
10.3 分析JNI層部分
10.4 分析Java層部分
10.5 實現移植工作
10.5.1 移植振動器驅動程序
10.5.2 實現硬件抽象層
10.6 在MSM平臺實現振動器驅動
第11章 音頻系統驅動
11.1 音頻系統結構
11.2 分析音頻系統的層次
11.2.1 層次說明
11.2.2 Media庫中的Audio框架
11.2.3 本地代碼
11.2.4 分析JNI代碼
11.2.5 Java層代碼簡介
11.3 移植Audio系統的工作
11.3.1 我們的工作
11.3.2 分析硬件抽象層
11.3.3 分析AudioFlinger中的Audio
硬件抽象層的實現
11.3.4 真正實現Audio硬件抽象層
11.4 在MSM平臺實現Audio驅動系統
11.4.1 實現Audio驅動程序
11.4.2 實現硬件抽象層
第12章 視頻輸出系統驅動
12.1 視頻輸出系統結構
12.2 需要移植的部分
12.3 分析硬件抽象層
12.3.1 Overlay系統硬件抽象層的接口
12.3.2 實現Overlay系統的硬件抽象層
12.3.3 實現接口
12.4 實現Overlay硬件抽象層
12.5 在OMAP平臺實現Overlay系統
12.5.1 實現輸出視頻驅動程序
12.5.2 實現Overlay硬件抽象層
12.6 系統層調用Overlay HAL的架構
12.6.1 調用Overlay HAL的架構的
流程
12.6.2 S3C6410 Android Overlay的測試代碼
第13章 OpenMax多媒體框架
13.1 OpenMax基本層次結構
13.2 分析OpenMax框架構成
13.2.1 OpenMax總體層次結構
13.2.2 OpenMax IL層的結構
13.2.3 Android中的OpenMax
13.3 實現OpenMax IL層接口
13.3.1 OpenMax IL層的接口
13.3.2 在OpenMax IL層中需要做什么
13.3.3 研究Android中的OpenMax適配層
13.4 在OMAP平臺實現OpenMax IL
13.4.1 實現文件
13.4.2 分析TI OpenMax IL的核心
13.4.3 實現TI OpenMax IL組件實例
第14章 多媒體插件框架
14.1 Android多媒體插件
14.2 需要移植的內容
14.3 OpenCore引擎
14.3.1 OpenCore層次結構
14.3.2 OpenCore代碼結構
14.3.3 OpenCore編譯結構
14.3.4 OpenCore OSCL
14.3.5 實現OpenCore中的OpenMax部分
14.3.6 OpenCore的擴展
14.4 Stagefright引擎
14.4.1 Stagefright代碼結構
14.4.2 Stagefright實現OpenMax接口
14.4.3 Video Buffer傳輸流程
第15章 傳感器系統
15.1 傳感器系統的結構
15.2 分析需要移植的內容
15.2.1 移植驅動程序
15.2.2 移植硬件抽象層
15.2.3 實現上層部分
15.3 在模擬器中實現傳感器驅動
第16章 照相機系統
16.1 Camera系統的結構
16.2 分析需要移植的內容
16.3 移植和調試
16.3.1 V4L2驅動程序
16.3.2 硬件抽象層
16.4 實現Camera系統的硬件抽象層
16.4.1 Java程序部分
16.4.2 Camera的Java本地調用部分
16.4.3 Camera的本地庫libui.so
16.4.4 Camera服務libcameraservice.so
16.5 在MSM平臺實現Camera驅動系統
16.6 在OMAP平臺實現Camera驅動系統
第17章 Wi-Fi系統、藍牙系統和GPS系統
17.1 Wi-Fi系統
17.1.1 Wi-Fi系統的結構
17.1.2 需要移植的內容
17.1.3 移植和調試
17.1.4 OMAP平臺實現Wi-Fi
17.1.5 配置Wi-Fi的流程
17.1.6 具體演練――在Android下實現Ethernet
17.2 藍牙系統
17.2.1 藍牙系統的結構
17.2.2 需要移植的內容
17.2.3 具體移植
17.2.4 MSM平臺的藍牙驅動
17.3 定位系統
17.3.1 定位系統的結構
17.3.2 分析需要移植的內容
17.3.3 分析驅動程序
17.3.4 分析硬件抽象層
17.3.5 分析上層應用部分
第18章 電話系統
18.1 電話系統基礎
18.1.1 電話系統簡介
18.1.2 電話系統結構
18.2 需要移植的內容
18.3 移植和調試
18.3.1 驅動程序
18.3.2 RIL接口
18.4 電話系統實現流程分析
18.4.1 初始啟動流程
18.4.2 request流程
18.4.3 response流程
第19章 分析時鐘系統驅動
19.1 Alarm系統基礎
19.1.1 Alarm層次結構介紹
19.1.2 我們需要移植的內容
19.2 分析RTC驅動程序
19.3 分析Alarm驅動程序
19.3.1 分析文件android_alarm.h
19.3.2 分析文件alarm.c
19.3.3 分析文件alarm-dev.c
19.4 分析JNI層
19.5 分析Java層
19.5.1 分析AlarmManagerService類
19.5.2 分析AlarmManager類
19.6 模擬器環境的具體實現
第20章 分析USB Gadget驅動
20.1 分析Linux內核的USB驅動程序
20.1.1 USB設備基礎
20.1.2 分析USB 和sysfs的聯系
20.1.3 分析urb通信方式
20.1.4 分析USB驅動的例程
20.2 分析USB Gadget驅動
20.2.1 分析軟件結構
20.2.2 層次整合
20.2.3 USB設備枚舉
第21章 其他系統
21.1 Lights光系統
21.1.1 Lights光系統的結構
21.1.2 需要移植的內容
21.1.3 移植和調試
21.1.4 MSM平臺實現光系統
21.2 Battery電池系統
21.2.1 Battery系統的結構
21.2.2 需要移植的內容
21.2.3 移植和調試
21.2.4 在模擬器中實現電池系統
文檔截圖