注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡計算機組織與體系結構Android底層接口與驅(qū)動開發(fā)技術詳解

Android底層接口與驅(qū)動開發(fā)技術詳解

Android底層接口與驅(qū)動開發(fā)技術詳解

定 價:¥89.00

作 者: 陳強
出版社: 中國鐵道出版社
叢編項:
標 簽: 程序設計 計算機/網(wǎng)絡 移動開發(fā)

ISBN: 9787113197957 出版時間: 2015-01-01 包裝:
開本: 頁數(shù): 字數(shù):  

內(nèi)容簡介

  Android系統(tǒng)從誕生到現(xiàn)在短短的幾年時間,憑借其操作易用性和開發(fā)的簡潔性,贏得了廣大消費用戶和開發(fā)者的支持,目前一直位居智能手機操作系統(tǒng)市場占有率榜首的位置。本書分為三篇,共計24章,循序漸進地講解了Android系統(tǒng)中底層驅(qū)動方面的知識。本書從獲取源碼和源碼結構分析講起,依次講解了基礎知識篇、專用驅(qū)動篇和設備驅(qū)動篇三大部分的基本知識。在講解每一個驅(qū)動時,都從Android系統(tǒng)源碼開始入手,遵循“內(nèi)核分析—驅(qū)動實現(xiàn)—JNI層分析—Java應用層—系統(tǒng)移植和改造”這一主線,透徹地剖析了每一個驅(qū)動系統(tǒng)的完整實現(xiàn)流程。本書幾乎涵蓋了Android驅(qū)動方面的所有主要內(nèi)容,并且全書內(nèi)容言簡意賅,講解方法通俗易懂,不但適用于應用高手們,也適合初學者學習并消化。本書定位于有一定基礎的Android開發(fā)人員,幫助其細致分析Android源碼和底層驅(qū)動開發(fā),積累經(jīng)驗,快速向Android殿堂級高手邁進。

作者簡介

  陳強,西安交通大學計算機碩士,通信工程碩士,現(xiàn)就職于上海機鋒科技公司擔任項目經(jīng)理。主要負責底層嵌入式項目,精通C++、C、Java語言開發(fā),擅長Linux內(nèi)核驅(qū)動開發(fā),曾經(jīng)開發(fā)了金地智能家居系統(tǒng)和娛樂時代智能電視系統(tǒng),這兩款系統(tǒng)在業(yè)界比較有名,并得到了消費者用戶的歡迎。曾經(jīng)獨立編寫并移植了高通801芯片,實現(xiàn)了完整的通信和傳輸應用功能。

圖書目錄

第1篇 基礎知識篇
第 1章 Android驅(qū)動開發(fā)基礎
1.1 認識什么是驅(qū)動 1
1.1.1 驅(qū)動程序的作用 1
1.1.2 PC中的驅(qū)動 2
1.1.3 手機中的驅(qū)動程序 2
1.2 開源還是不開源 2
1.2.1 霧里看花的開源 3
1.2.2 從為什么選擇Java談為什么不開源驅(qū)動程序 3
1.2.3 對驅(qū)動開發(fā)者來說是一把雙刃劍 4
1.3 Linux開發(fā)基礎 4
1.3.1 Linux歷史簡介 4
1.3.2 主要版本 5
1.3.3 Linux的巨大前景 5
1.4 Android和Linux的關系 6
1.4.1 Android繼承于Linux 6
1.4.2 Android和Linux內(nèi)核的區(qū)別 6
1.5 簡析Linux內(nèi)核 8
1.5.1 Linux內(nèi)核的體系結構 8
1.5.2 和Android密切相關的Linux內(nèi)核知識 10
1.6 分析Linux內(nèi)核源碼 14
1.6.1 源碼目錄結構 14
1.6.2 瀏覽源碼的工具 16
1.6.3 Linux內(nèi)核的顯著特性 18
1.6.4 學習Linux內(nèi)核的方法 24
第 2章 獲取并編譯Android源碼
2.1 獲取Android源碼 29
2.1.1 在Linux系統(tǒng)獲取Android源碼 29
2.1.2 在Windows平臺獲取Android源碼 30
2.2 分析Android源碼結構 36
2.3 編譯Android源碼 37
2.3.1 搭建編譯環(huán)境 38
2.3.2 開始編譯 39
2.3.3 在模擬器中運行 40
2.3.4 常見的錯誤分析 40
2.3.5 實踐演練——演示兩種編譯Android程序的方法 41
2.4 編譯Android Kernel 44
2.4.1 獲取Goldfish內(nèi)核代碼 45
2.4.2 獲取MSM內(nèi)核代碼 47
2.4.3 獲取OMAP內(nèi)核代碼 47
2.4.4 編譯Android的Linux內(nèi)核 48
第 3章 Android驅(qū)動移植基礎
3.1 驅(qū)動開發(fā)需要做的工作 50
3.2 Android移植基礎 52
3.2.1 移植的任務 52
3.2.2 需要移植的內(nèi)容 53
3.2.3 驅(qū)動開發(fā)需要做的工作 54
3.3 Android對Linux的改造 55
3.3.1 Android的獨有驅(qū)動 55
3.3.2 Android的核心驅(qū)動 55
3.3.3 Android對Linux內(nèi)核文件的改動 57
3.3.4 為Android構建 Linux的操作系統(tǒng) 58
3.4 內(nèi)核空間和用戶空間之間接口 59
3.4.1 內(nèi)核空間和用戶空間的相互作用 59
3.4.2 系統(tǒng)和硬件之間的交互 59
3.4.3 使用Relay實現(xiàn)內(nèi)核到用戶空間的數(shù)據(jù)傳輸 61
3.5 三類驅(qū)動程序 65
3.5.1 字符設備驅(qū)動 65
3.5.2 塊設備驅(qū)動 72
3.5.3 網(wǎng)絡設備驅(qū)動 75

第 4章 分析三大內(nèi)核系統(tǒng)
4.1 Goldfish內(nèi)核和驅(qū)動解析 77
4.1.1 Goldfish基礎 78
4.1.2 Android專用驅(qū)動簡介 79
4.1.3 Ashmem驅(qū)動介紹 82
4.1.4 Pmem驅(qū)動介紹 82
4.1.5 Alarm驅(qū)動程序 83
4.1.6 USB Gadget驅(qū)動程序 83
4.1.7 Paranoid驅(qū)動介紹 84
4.1.8 Goldfish的設備驅(qū)動 85
4.2 MSM內(nèi)核和驅(qū)動解析 87
4.2.1 MSM基礎 87
4.2.2 移植MSM內(nèi)核簡介 90
4.2.3 移植MSM 91
4.3 OMAP內(nèi)核和驅(qū)動解析 98
4.3.1 OMAP基礎 98
4.3.2 OMAP內(nèi)核 100
4.3.3 移植OMAP體系結構 101
4.3.4 移植Android專用驅(qū)動和組件 108
4.3.5 OMAP的設備驅(qū)動 109
第2篇 專用驅(qū)動篇
第 5章 分析JNI
5.1 JNI的本質(zhì) 114
5.2 分析Java層 116
5.2.1 加載JNI庫 116
5.2.2 實現(xiàn)掃描工作 118
5.2.3 讀取并保存信息 119
5.2.4 刪除不是SD卡中的文件信息 121
5.2.5 processDirectory 121
5.2.6 掃描函數(shù)scanFile() 122
5.2.7 JNI中的異常處理 122
5.3 分析JNI層 123
5.3.1 將Native對象的指針保存到Java對象 123
5.3.2 創(chuàng)建Native層的MediaScanner對象 124
5.4 Native(本地)層 124
5.4.1 注冊JNI函數(shù) 124
5.4.2 完成注冊工作 126
5.4.3 動態(tài)注冊 128
5.4.4 處理路徑參數(shù) 130
5.4.5 掃描文件 130
5.4.6 添加TAG信息 131
5.4.7 總結函數(shù)JNI_OnLoad()與函數(shù)JNI_OnUnload()的用途 131
5.4.8 Java與JNI基本數(shù)據(jù)類型轉(zhuǎn)換 132
5.4.9 JNIEnv接口 133
5.4.10 JNI中的環(huán)境變量 135
5.5 Camera模塊的JNI實例分析 135
5.5.1 Java層預覽接口 135
5.5.2 注冊預覽的JNI函數(shù) 137
5.5.3 C/C++層的預覽函數(shù) 140
5.6 開發(fā)自己的JNI程序 140
第 6章 硬件設備驅(qū)動程序
6.1 初識HAL層 143
6.1.1 HAL層簡介 144
6.1.2 HAL_legacy和HAL的對比 145
6.2 分析HAL層源碼 145
6.2.1 分析HAL moudle 146
6.2.2 文件hardware.h 146
6.2.3 文件hardware.c 148
6.3 分析硬件抽象層的加載過程 151
6.4 分析硬件訪問服務 153
6.4.1 定義硬件訪問服務接口 153
6.4.2 實現(xiàn)硬件訪問服務 154
6.5 分析mokoid工程 155
6.5.1 直接調(diào)用service方法的實現(xiàn)代碼 156
6.5.2 通過Manager調(diào)用service的實現(xiàn)代碼 160
6.6 分析Sensor(傳感器)在HAL層的實現(xiàn) 163
6.6.1 HAL層的Sensor代碼 163
6.6.2 Sensor編程的流程 165
6.7 HAL和系統(tǒng)移植 166
6.7.1 移植各個Android部件的方式 166
6.7.2 輔助工作 166
第 7章 Binder驅(qū)動程序
7.1 引出Binder機制 172
7.2 Binder機制概述 173
7.3 分析Binder驅(qū)動程序的數(shù)據(jù)結構 175
7.4 設備初始化 185
7.5 打開Binder設備文件 186
7.6 實現(xiàn)內(nèi)存映射 188
7.6.1 分析流程 188
7.6.2 分析具體代碼 188
7.7 釋放物理頁面 193
7.8 處理內(nèi)核緩沖區(qū) 193
7.8.1 分配內(nèi)核緩沖區(qū)函數(shù) 193
7.8.2 添加到紅黑樹 195
7.8.3 釋放內(nèi)核緩沖區(qū) 196
7.8.4 查詢內(nèi)核緩沖區(qū) 198
7.9 Binder封裝庫 198
7.9.1 類BBinder 199
7.9.2 類BpRefBase 202
7.9.3 類IPCThreadState 203
第 8章 Logger日志驅(qū)動
8.1 Logger系統(tǒng)基礎 207
8.2 分析Logger驅(qū)動程序 207
8.2.1 分析文件logger.h 208
8.2.2 分析文件logger.c 209
8.3 日志庫liblog 223
8.4 分析日志寫入接口 227
8.4.1 分析C/C++層的寫入接口 228
8.4.2 分析Java層的寫入接口 229
第 9章 內(nèi)存系統(tǒng)驅(qū)動
9.1 分析Android的進程通信機制 238
9.1.1 Android的進程間通信(IPC)機制Binder 238
9.1.2 Service Manager是Binder機制的上下文管理者 240
9.2 分析Ashmem驅(qū)動程序 241
9.2.1 基礎數(shù)據(jù)結構 241
9.2.2 初始化處理 242
9.2.3 打開匿名共享內(nèi)存設備文件 244
9.2.4 內(nèi)存映射 246
9.2.5 讀/寫操作 247
9.2.6 鎖定和解鎖 249
9.2.7 回收內(nèi)存塊 254
9.3 分析C++訪問接口層 255
9.3.1 接口MemoryBase 255
9.3.2 接口MemoryBase 264
9.4 分析Java訪問接口層 267
第 10章 分析電源管理模塊
10.1 Android Power Management基礎 271
10.2 Framework層分析 272
10.2.1 文件PowerManager.java 272
10.2.2 文件PowerManagerService.java 273
10.3 JNI層分析 294
10.3.1 文件android_os_Power.cpp 294
10.3.2 文件power.c 295
10.4 Kernel(內(nèi)核)層分析 296
10.4.1 文件power.c 296
10.4.2 文件earlysuspend.c 298
10.4.3 文件wakelock.c 299
10.4.4 文件resume.c 301
10.4.5 文件suspend.c 301
10.4.6 文件main.c 302
10.4.7 proc文件 303
10.5 wakelock和early_suspend 303
10.5.1 wake lock的原理 303
10.5.2 early_suspend的原理 304
10.5.3 Android休眠 305
10.5.4 Android喚醒 307
第 11章 分析低內(nèi)存管理模塊
11.1 分析OOM機制 308
11.1.1 OOM機制基礎 308
11.1.2 分析OOM機制的具體實現(xiàn) 309
11.2 分析Low Memory Killer的原理和機制 315
11.3 分析Low Memory Killer驅(qū)動 316
11.3.1 Low Memory Killer驅(qū)動基礎 316
11.3.2 分析核心功能 317
11.3.3 設置用戶接口 320
第 12章 分析物理內(nèi)存驅(qū)動
12.1 PMEM基礎 323
12.1.1 PMEM概述 323
12.1.2 Platform設備基礎 324
12.1.3 PMEM與Ashmem的區(qū)別 325
12.2 分析PMEM系統(tǒng)驅(qū)動程序 325
12.2.1 分析設備實現(xiàn) 325
12.2.2 分析驅(qū)動的具體實現(xiàn) 327
12.2.3 總結PMEM驅(qū)動的調(diào)用流程 350
12.3 分析用戶接口空間 350
12.3.1 釋放位圖內(nèi)存 351
12.3.2 釋放位圖內(nèi)存空間 351
12.3.3 獲取位圖占用內(nèi)存 352
第 13章 分析Time Device驅(qū)動
13.1 分析Timed Output驅(qū)動程序 354
13.1.1 設備類 354
13.1.2 分析Timed Output驅(qū)動的具體實現(xiàn) 359
13.1.3 實現(xiàn)timed_output_dev設備的讀寫操作 361
13.2 分析Timed Gpio驅(qū)動程序 362
13.2.1 Timed Gpio驅(qū)動的基本原理 363
13.2.2 分析Timed Gpio驅(qū)動的實現(xiàn)文件 363
第 14章 分析調(diào)試機制驅(qū)動Ram Console
14.1 Ram Console基礎 368
14.2 分析Ram Console的具體實現(xiàn) 369
14.2.1 分析文件ram_console.h 369
14.2.2 分析文件ram_console.c 369
第 15章 分析時鐘系統(tǒng)驅(qū)動Alarm
15.1 Alarm系統(tǒng)基礎 379
15.1.1 Alarm層次結構介紹 379
15.1.2 需要移植的內(nèi)容 381
15.2 分析RTC驅(qū)動程序 381
15.3 分析Alarm驅(qū)動程序 381
15.3.1 分析文件android_alarm.h 382
15.3.2 分析文件alarm.c 383
15.3.3 分析文件alarm-dev.c 394
15.4 分析JNI層 402
15.5 分析Java層 403
15.5.1 分析AlarmManagerService類 404
15.5.2 分析AlarmManager類 412
15.6 模擬器環(huán)境的具體實現(xiàn) 413
第 16章 分析USB Gadget驅(qū)動
16.1 分析Linux內(nèi)核的USB驅(qū)動程序 415
16.1.1 USB設備基礎 415
16.1.2 分析USB 和sysfs的聯(lián)系 419
16.1.3 分析urb通信方式 422
16.1.4 分析USB驅(qū)動的例程 427
16.2 分析USB Gadget驅(qū)動 438
16.2.1 分析軟件結構 438
16.2.2 層次整合 447
16.2.3 USB設備枚舉 457
第3篇 設備驅(qū)動篇
第 17章 FrameBuffer顯示系統(tǒng)驅(qū)動
17.1 顯示系統(tǒng)介紹 473
17.2 分析內(nèi)核層 474
17.2.1 分析接口文件fb.h 474
17.2.2 分析內(nèi)核實現(xiàn)文件fbmem.c 477
17.3 分析硬件抽象層 499
17.3.1 分析頭文件 500
17.3.2 分析硬件幀緩沖區(qū) 501
17.3.3 實現(xiàn)緩沖區(qū)的分配 503
17.3.4 顯示緩沖映射 504
17.3.5 分析管理庫文件LayerBuffer.cpp 505
第 18章 輸入系統(tǒng)驅(qū)動應用
18.1 輸入系統(tǒng)介紹 507
18.1.1 Android輸入系統(tǒng)結構元素介紹 507
18.1.2 移植工作 509
18.2 分析Input(輸入)系統(tǒng)驅(qū)動 509
18.2.1 分析頭文件 510
18.2.2 分析核心文件input.c 513
18.2.3 分析event機制 527
18.3 分析硬件抽象層 530
18.3.1 分析文件KeycodeLabels.h 530
18.3.2 分析文件KeyCharacterMap.h 534
18.3.3 分析Kl格式文件 535
18.3.4 分析KCM格式文件 536
18.3.5 分析文件EventHub.cpp 536
第 19章 音頻系統(tǒng)驅(qū)動
19.1 音頻系統(tǒng)基礎 541
19.2 分析音頻系統(tǒng)的層次 542
19.2.1 層次說明 543
19.2.2 Media庫中的Audio框架 543
19.2.3 本地代碼 545
19.2.4 分析JNI代碼 548
19.2.5 Java層代碼簡介 549
19.3 移植Audio系統(tǒng)的工作 549
19.3.1 我們的工作 549
19.3.2 分析硬件抽象層 550
19.3.3 分析AudioFlinger中的Audio硬件抽象層的實現(xiàn) 551
19.3.4 真正實現(xiàn)Audio硬件抽象層 556
19.4 在MSM平臺實現(xiàn)Audio驅(qū)動系統(tǒng) 557
19.4.1 實現(xiàn)Audio驅(qū)動程序 557
19.4.2 實現(xiàn)硬件抽象層 558
第 20章 視頻輸出系統(tǒng)驅(qū)動
20.1 視頻輸出系統(tǒng)結構 562
20.2 需要移植的部分 564
20.3 分析硬件抽象層 564
20.3.1 Overlay系統(tǒng)硬件抽象層的接口 564
20.3.2 實現(xiàn)Overlay系統(tǒng)的硬件抽象層 566
20.3.3 實現(xiàn)接口 567
20.4 實現(xiàn)Overlay硬件抽象層 568
第 21章 振動器系統(tǒng)驅(qū)動
21.1 振動器系統(tǒng)結構 571
21.2 分析硬件抽象層 572
21.3 分析JNI層部分 574
21.4 分析Java層部分 575
21.5 實現(xiàn)移植工作 578
21.5.1 移植振動器驅(qū)動程序 578
21.5.2 實現(xiàn)硬件抽象層 579
21.6 在MSM平臺實現(xiàn)振動器驅(qū)動 580
第 22章 傳感器系統(tǒng)驅(qū)動
22.1 傳感器系統(tǒng)的結構 583
22.2 分析需要移植的內(nèi)容 585
22.2.1 移植驅(qū)動程序 585
22.2.2 移植硬件抽象層 586
22.2.3 實現(xiàn)上層部分 587
22.3 在模擬器中實現(xiàn)傳感器驅(qū)動 591
第 23章 照相機系統(tǒng)
23.1 Camera系統(tǒng)的結構 596
23.2 分析需要移植的內(nèi)容 598
23.3 移植和調(diào)試 599
23.3.1 V4L2驅(qū)動程序 599
23.3.2 硬件抽象層 605
23.4 實現(xiàn)Camera系統(tǒng)的硬件抽象層 609
23.4.1 Java程序部分 609
23.4.2 Camera的Java本地調(diào)用部分 610
23.4.3 Camera的本地庫libui.so 610
23.4.4 Camera服務libcameraservice.so 611
第 24章 Wi-Fi系統(tǒng)、藍牙系統(tǒng)和GPS系統(tǒng)
24.1 Wi-Fi系統(tǒng) 616
24.1.1 Wi-Fi系統(tǒng)的結構 616
24.1.2 分析需要移植的內(nèi)容 618
24.1.3 分析本地實現(xiàn) 618
24.1.4 分析JNI層 621
24.1.5 分析Java FrameWork層 623
24.1.6 分析Setting中的Wi-Fi設置 624
24.2 藍牙系統(tǒng) 625
24.2.1 藍牙系統(tǒng)的結構 625
24.2.2 分析需要移植的內(nèi)容 627
24.2.3 分析驅(qū)動程序 628
24.2.4 分析本地代碼 628
24.2.5 在MSM平臺實現(xiàn)藍牙驅(qū)動系統(tǒng) 630
24.3 定位系統(tǒng) 631
24.3.1 分析定位系統(tǒng)的結構 631
24.3.2 分析需要移植的內(nèi)容 633
24.3.3 分析驅(qū)動程序 633
24.3.4 分析硬件抽象層 633
24.3.5 分析上層應用部分 635

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號