注冊 | 登錄讀書好,好讀書,讀好書!
讀書網-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網絡軟件與程序設計程序設計綜合Android深度探索:HAL與驅動開發(fā)(卷1)

Android深度探索:HAL與驅動開發(fā)(卷1)

Android深度探索:HAL與驅動開發(fā)(卷1)

定 價:¥99.00

作 者: 李寧 編著
出版社: 人民郵電出版社
叢編項:
標 簽: 程序設計 計算機/網絡 移動開發(fā)

購買這本書可以去


ISBN: 9787115298027 出版時間: 2013-01-01 包裝: 平裝
開本: 小16開 頁數: 637 字數:  

內容簡介

  《Android深度探索(卷1):HAL與驅動開發(fā)》分為4篇,分別從搭建開發(fā)環(huán)境,Linux驅動和Android HAL的基礎知識,開發(fā)Linux驅動的高級技術和分析典型的Linux驅動源代碼4個方面介紹Android和Linux的底層開發(fā)。本書使用的試驗環(huán)境是Ubuntu Linux12.04 LTS、Android模擬器和S3C6410開發(fā)板。在第1篇詳細介紹了如何搭建和使用這3個試驗環(huán)境。第2篇通過3個Linux驅動的完整案例(統(tǒng)計單詞個數驅動、LED驅動和蜂鳴器驅動)從不同角度來討論如何開發(fā)一個完整的Linux驅動。并且通過完整的案例介紹了如何編寫Android HAL,以及如何與Linux驅動交互。第3篇則介紹了開發(fā)Linux驅動所需要的高級技術,這些技術包括并發(fā)控制、阻塞和非阻塞I/O、異步編程、Linux中斷和底半部、時間管理、內存管理和I/O訪問。最后一部分分析了一些典型Linux驅動的源代碼(RTC驅動、LCD驅動、音頻驅動、塊設備驅動、網絡設備驅動和USB驅動)。《Android深度探索(卷1):HAL與驅動開發(fā)》注重理論和實踐相結合。在介紹了大量的基礎知識的同時,為每一個知識點提供了完整的案例,使讀者可以通過實際的代碼更好地理解Linux驅動和Android底層技術。為了使讀者更好地實踐本書提供的實例代碼,在隨書光盤中除了提供源代碼文件外,還提供了一個VMWare Ubuntu Linux12.04 LTS的虛擬環(huán)境。讀者可以在Windows、Linux和Mac OS X上,通過VMWare打開該虛擬機文件來學習和測試本書的例子(虛擬環(huán)境中也帶了一套本書提供的例子代碼)?!禔ndroid深度探索(卷1):HAL與驅動開發(fā)》適合底層開發(fā)的程序員和編程愛好者使用,也適合作為相關培訓學校的Android底層開發(fā)培訓教材。

作者簡介

  擁有超過10年的軟件開發(fā)經驗,曾任某知名企業(yè)項目經理,對Android有深入的研究,是國內第一批Android實踐者。

圖書目錄

第一篇 Android驅動開發(fā)前的準備 
第1章 Android系統(tǒng)移植與驅動開發(fā)概述 
1.1 Android系統(tǒng)架構 
1.2 Android系統(tǒng)移植的主要工作 
1.3 查看Linux內核版本 
1.4 Linux內核版本號的定義規(guī)則 
1.5 如何學習Linux驅動開發(fā) 
1.6 Linux設備驅動 
1.6.1 設備驅動的發(fā)展和作用 
1.6.2 設備的分類及特點 
1.7  見識一下什么叫Linux驅動:LED 
1.8 小結 第2章 搭建Android開發(fā)環(huán)境 
2.1 Android底層開發(fā)需要哪些工具 
2.2 安裝JDK 
2.3 搭建Android應用程序開發(fā)環(huán)境 
2.3.1 安裝Android SDK 
2.3.2 安裝Eclipse 
2.3.3 安裝ADT 
2.3.4 配置ADT 
2.3.5 建立AVD 
2.4 安裝Android NDK開發(fā)環(huán)境 
2.4.1 下載Android NDK 
2.4.2 安裝CDT 
2.4.3 命令行方式編譯Android NDK程序 
2.4.4 導入Android NDK的例子 
2.4.5 配置Android NDK的集成開發(fā)環(huán)境 
2.5 安裝交叉編譯環(huán)境 
2.6 小結 第3章 Git使用入門 
3.1 安裝Git 
3.2 查看Git文檔 
3.3 源代碼的提交與獲取 
3.3.1 創(chuàng)建版本庫:git init 
3.3.2 將文件提交到本地版本庫:git commit 
3.3.3 創(chuàng)建本地分支:git branch 
3.3.4 切換本地分支:git checkout 
3.3.5 在GitHub上創(chuàng)建開源項目 
3.3.6 上傳源代碼到GitHub:git push 
3.3.7 從GitHub下載源代碼:git clone 
3.4 小結 第4章 源代碼的下載和編譯 
4.1 下載、編譯和測試Android源代碼 
4.1.1 配置Android源代碼下載環(huán)境 
4.1.2 Android源代碼目錄結構解析 
4.1.3 下載Android源代碼中的一部分 
4.1.4 編譯Android 源代碼 
4.1.5 out目錄結構分析 
4.1.6 將自己的APK作為Android內置程序發(fā)布 
4.1.7 用模擬器測試system.img文件 
4.2 下載和編譯Linux內核源代碼 
4.2.1 下載Linux內核源代碼 
4.2.2 Linux內核源代碼的目錄結構 
4.2.3 安裝Android內核的編譯環(huán)境 
4.2.4 配置和編譯Linux內核 
4.3 小結 第5章 搭建S3C6410開發(fā)板的測試環(huán)境 
5.1 S3C6410開發(fā)板簡介 
5.2 安裝串口調試工具:minicom 
5.3 燒寫Android系統(tǒng) 
5.4 配置有線網絡 
5.5 小結 第二篇 Android底層開發(fā)入門 第6章 第一個Linux驅動程序:統(tǒng)計單詞個數 
6.1 Linux驅動到底是個什么東西 
6.2 編寫Linux驅動程序的步驟 
6.3 第一個Linux驅動:統(tǒng)計單詞個數 
6.3.1 編寫Linux驅動程序前的準備工作 
6.3.2 編寫Linux驅動程序的骨架(初始化和退出驅動) 
6.3.3 指定與驅動相關的信息 
6.3.4 注冊和注銷設備文件 
6.3.5 指定回調函數 
6.3.6 實現統(tǒng)計單詞數的算法 
6.3.7 編譯、安裝、卸載Linux驅動程序 
6.4 使用多種方式測試Linux驅動 
6.4.1 使用Ubuntu Linux測試Linux驅動 
6.4.2 在Android模擬器上通過原生(Native)C程序測試Linux驅動 
6.4.3 使用Android NDK測試Linux驅動 
6.4.4 使用Java代碼直接操作設備文件來測試Linux驅動 
6.4.5 使用S3C6410開發(fā)板測試Linux驅動 
6.4.6 將驅動編譯進Linux內核進行測試 
6.5 使用Eclipse開發(fā)和測試Linux驅動程序 
6.5.1 在Eclipse中開發(fā)Linux驅動程序 
6.5.2 在Eclipse中測試Linux驅動 
6.6 小結 第7章 LED將為我閃爍:控制發(fā)光二級管 
7.1 LED驅動的實現原理 
7.2 編寫LED驅動 
7.2.1 體驗LED驅動的奇妙 
7.2.2 創(chuàng)建LED驅動的設備文件 
7.2.3 卸載LED驅動的設備文件 
7.2.4 設置寄存器與初始化LED驅動 
7.2.5 控制LED 
7.2.6 LED驅動的模塊參數 
7.2.7 LED驅動的完整代碼 
7.3 測試LED驅動 
7.3.1 編寫測試I/O控制命令的通用程序 
7.3.2 使用NDK測試LED驅動 
7.3.3 使用Java測試LED驅動 
7.4 LED驅動的移植 
7.5 小結 第8章 讓開發(fā)板發(fā)出聲音:蜂鳴器驅動 
8.1 Linux驅動的代碼重用 
8.1.1 編譯是由多個文件組成的Linux驅動 
8.1.2 Linux驅動模塊的依賴(導出符號) 
8.2 強行卸載Linux驅動 
8.3 蜂鳴器(PWM)驅動 
8.3.1 蜂鳴器驅動的原理 
8.3.2 實現蜂鳴器驅動 
8.3.3 測試蜂鳴器驅動 
8.4 小結 第9章 硬件抽象層:HAL 
9.1 為什么要在Android中加入HAL 
9.2 Android HAL架構 
9.3 為LED驅動增加HAL 
9.3.1 編寫一款支持HAL的Linux驅動程序的步驟 
9.3.2 顛覆Linux驅動的設計理念:精簡LED驅動 
9.3.3 測試讀寫寄存器操作 
9.3.4 編寫調用LED驅動的HAL模塊 
9.3.5 編寫調用HAL模塊的Service 
9.3.6 HAL模塊的存放路徑和命名規(guī)則 
9.3.7 編寫調用Service的Java庫 
9.3.8 測試LED驅動 
9.4 小結 第10章 嵌入式Linux的調試技術 
10.1 打印內核調試信息:printk 
10.2 防止printk函數降低Linux 驅動性能 
10.3 通過虛擬文件系統(tǒng)(/proc)進行數據交互 
10.4 調試工具 
10.4.1 用gdb調試用戶空間程序 
10.4.2 用gdbserver遠程調試用戶空間程序 
10.4.3 用kgdb遠程調試內核程序 
10.5 小結 第三篇 Linux驅動開發(fā)高級技術 第11章 Linux驅動程序中的并發(fā)控制 
11.1 并發(fā)和競態(tài) 
11.2 原子操作 
11.2.1 整型原子操作 
11.2.2 64位整型原子操作 
11.2.3 位原子操作 
11.2.4 用原子操作阻止設備文件被多個進程打開 
11.3 自旋鎖(Spin Lock) 
11.3.1 自旋鎖的使用方法 
11.3.2 使用自旋鎖保護臨界區(qū) 
11.3.3 讀寫自旋鎖 
11.3.4 使用讀寫自旋鎖保護臨界區(qū) 
11.3.5 順序鎖(seqlock) 
11.3.6 使用順序鎖寫入正在讀取的共享資源 
11.4 讀—復制—更新(RCU)機制 
11.4.1 RCU的原理 
11.4.2 RCU API 
11.4.3 RCU的應用 
11.5 信號量(Semaphore) 
11.5.1 信號量的使用 
11.5.2 信號量用于同步 
11.5.3 讀寫信號量 
11.5.4 使用讀寫信號量保護臨界區(qū) 
11.6 互斥體(Mutex) 
11.7 完成量(Completion) 
11.8 小結 第12章 Linux驅動程序中的阻塞和非阻塞I/O 
12.1 等待隊列 
12.1.1 等待隊列原理 
12.1.2 等待隊列的API 
12.1.3 等待隊列的使用方法 
12.1.4 支持休眠和喚醒的Linux驅動 
12.2 輪詢操作 
12.2.1 用戶空間的select函數 
12.2.2 內核空間的poll函數 
12.2.3 以非阻塞的方式訪問Linux驅動 
12.3 小結 第13章 Linux驅動程序中的異步編程 
13.1 信號與異步通知 
13.1.1 Linux信號 
13.1.2 接收Linux信號 
13.1.3 發(fā)送信號 
13.2 異步I/O(AIO) 
13.2.1 異步操作的API 
13.2.2 異步讀寫本地文件 
13.2.3 Linux驅動中的異步函數(aio_read和aio_write) 
13.2.4 接收信號時異步讀取數據 
13.2.5 AIO中的回調函數 
13.3 小結 第14章 Linux中斷和底半部 
14.1 什么是中斷 
14.2 中斷處理程序 
14.3 Linux 中斷處理的核心:頂半部和底半部 
14.4 獲取Linux 系統(tǒng)的中斷統(tǒng)計信息 
14.5 Linux 中斷編程 
14.5.1 注冊中斷處理程序 
14.5.2 注銷中斷處理程序 
14.5.3 編寫中斷處理函數 
14.5.4 共享中斷處理程序 
14.5.5 禁止和激活中斷 
14.5.6 禁止和激活中斷線 
14.5.7 獲取中斷系統(tǒng)的狀態(tài) 
14.5.8 與中斷編程相關的函數和宏 
14.6 實例:S3C6410實時鐘中斷 
14.7 中斷中下文 
14.8 中斷的實現原理 
14.9 底半部 
14.9.1 為什么要使用底半部 
14.9.2 實現底半部的機制 
14.9.3 軟中斷 
14.9.4 Tasklet 
14.9.5 實例:Tasklet演示 
14.9.6 軟中斷處理線程(ksoftirqd) 
14.9.7 工作隊列(work queue) 
14.9.8 與工作隊列相關的API 
14.9.9 實例:工作隊列演示 
14.10 小結 第15章 時間管理 
15.1 Linux內核中的時間概念 
15.1.1 時鐘頻率 
15.1.2 提高時鐘頻率的優(yōu)點和缺點 
15.2 節(jié)拍總數(jiffies) 
15.2.1 訪問jiffies 
15.2.2 jiffies、時間和時鐘頻率之間的轉換 
15.2.3 jiffies的回繞 
15.2.4 用戶空間和時鐘頻率 
15.3 實時時鐘和定時器 
15.4 時鐘中斷處理程序的實現 
15.5 讀寫本地時間 
15.6 內核定時器 
15.6.1 如何使用內核定時器 
15.6.2 實例:秒表定時器 
15.7 內核延遲 
15.7.1 忙等待 
15.7.2 短延遲 
15.7.3 休眠延遲(schedule_timeout) 
15.8 小結 第16章 內存管理與I/O訪問 
16.1 內存管理模式 
16.1.1 內存的基本單位:頁(Page) 
16.1.2 頁的邏輯劃分:區(qū)(zone) 
16.1.3 獲取頁 
16.1.4 釋放頁 
16.2 分配連續(xù)的內存空間(Kmalloc) 
16.2.1 gfp_mask標志 
16.2.2 釋放內存(kfree) 
16.3 分配不連續(xù)的內存空間(vmalloc) 
16.4 全局緩存(slab) 
16.4.1 Slab層的實現原理 
16.4.2 Slab分配器 
16.4.3 示例:從Slab高速緩存中分配和釋放對象 
16.5 Linux內存池 
16.5.1 內存池的實現原理 
16.5.2 示例:從內存池獲取對象 
16.6 虛擬地址與物理地址之間的轉換 
16.7 設備I/O端口與I/O內存 
16.7.1 讀寫I/O端口 
16.7.2 讀寫I/O內存 
16.7.3 將I/O端口映射為I/O內存 
16.7.4 申請和釋放設備I/O端口和I/O內存 
16.7.5 使用設備I/O端口和I/O內存的一般步驟 
16.8 內核空間與用戶空間共享數據 
16.8.1 內存映射與VMA 
16.8.2 示例:用戶程序讀取內核空間數據 
16.9 I/O內存靜態(tài)映射 
16.10 小結 第四篇 Linux設備驅動與Android底層開發(fā) 第17章 RTC驅動 
17.1 實時時鐘(RTC)結構與移植內容 
17.1.1 RTC系統(tǒng)的結構 
17.1.2 RTC驅動主要的移植工作 
17.2 RTC系統(tǒng)中的Android部分 
17.2.1 警報管理:AlarmManager 
17.2.2 警報服務:AlarmManagerService 
17.2.3 直接與Alarm驅動交互的JNI代碼 
17.3 Alarm驅動的分析與移植 
17.3.1 Alarm驅動簡介 
17.3.2 Alarm驅動中的關鍵數據結構 
17.3.3 Alarm驅動的應用層接口(alarm_dev.c)代碼分析 
17.3.4 Alarm驅動的通用文件(alarm.c)代碼分析 
17.4 RTC驅動的分析與移植 
17.4.1 實時時鐘(RTC)的特性 
17.4.2 RTC的結構 
17.4.3 RTC芯片的寄存器 
17.4.4 RTC驅動的用戶空間接口 
17.4.5 RTC系統(tǒng)組件之間的調用關系 
17.4.6 設備文件(/dev/rtc0)的I/O命令 
17.4.7 sysfs虛擬文件處理函數 
17.4.8 proc虛擬文件處理函數 
17.5 小結 第18章 LCD驅動 
18.1 LCD簡介 
18.1.1 液晶的工作原理 
18.1.2 LCD的種類 
18.1.3 LCD的技術參數 
18.1.4 LCD時序圖 
18.2 LCD驅動結構分析和移植要點 
18.3 幀緩沖(FrameBuffer)驅動設計與實現 
18.3.1 FrameBuffer設備 
18.3.2 示例:通過dd命令與FrameBuffer設備文件交互 
18.3.3 示例:編寫訪問FrameBuffer設備文件的程序 
18.3.4 FrameBuffer驅動的架構 
18.3.5 FrameBuffer驅動主要的數據結構 
18.3.6 如何在Linux內核中查找指定的內容 
18.3.7 FrameBuffer驅動設備事件的處理(fbmem.c) 
18.3.8 FrameBuffer驅動源代碼分析與移植 
18.4 FrameBuffer驅動的HAL層分析 
18.4.1 Gralloc庫 
18.4.2 初始化HAL Gralloc的核心結構體 
18.4.3 獲取Gralloc HAL模塊 
18.4.4 與FrameBuffer設備文件交互 
18.5 調用Gralloc HAL庫 
18.6 小結 第19章 音頻驅動 
19.1 音頻驅動基礎 
19.1.1 數字音頻簡介 
19.1.2 ALSA架構簡介 
19.1.3 ALSA設備文件 
19.1.4 數字采樣與數字錄音 
19.1.5 混音器 
19.1.6 音頻驅動的目錄結構 
19.1.7 音頻設備硬件接口 
19.1.8 ALSA架構支持的聲卡芯片 
19.2 AC97芯片的寄存器 
19.2.1 控制寄存器 
19.2.2 狀態(tài)寄存器 
19.2.3 編解碼器命令寄存器 
19.2.4 編解碼器狀態(tài)寄存器 
19.2.5 PCM輸出/輸入通道FIFO數據寄存器 
19.2.6 MIC輸入通道FIFO地址寄存器 
19.2.7 PCM輸出/輸入通道FIFO數據寄存器 
19.2.8 MIC輸入通道FIFO數據寄存器 
19.3 創(chuàng)建聲卡 
19.3.1 聲卡的頂層數據結構 
19.3.2 創(chuàng)建聲卡的步驟 
19.3.3 示例:基于ARM的AC97音頻驅動 
19.4 音頻邏輯設備 
19.4.1 創(chuàng)建PCM設備 
19.4.2 創(chuàng)建錄音和播放設備文件節(jié)點 
19.4.3 創(chuàng)建Control設備數據結構 
19.4.4 創(chuàng)建Control設備 
19.4.5 注冊與打開音頻字符設備 
19.5 嵌入式設備中的ALSA(ASoC) 
19.5.1 什么是ASoC 
19.5.2 ASoC的硬件架構 
19.5.3 ASoC的軟件架構 
19.5.4 如何確定S3C開發(fā)板使用了哪個音頻驅動 
19.5.5 ASoC架構中的Machine 
19.5.6 ASoC架構中的Codec 
19.5.7 ASoC架構中的Platform 
19.6 音頻驅動的HAL分析 
19.6.1 實現HAL Library 
19.6.2 調用HAL Library 
19.7 小結 第20章 Linux塊設備驅動 
20.1 塊設備簡介 
20.2 塊設備的體系架構 
20.3 塊設備的數據結構與相關操作 
20.3.1 磁盤設備(gendisk結構體) 
20.3.2 block_device_operations結構體 
20.3.3 I/O請求(request結構體) 
20.3.4 請求隊列(request_queue結構體) 
20.3.5 塊I/O(bio結構體) 
20.4 塊設備的加載和卸載 
20.5 塊設備的打開和釋放 
20.6 塊設備的ioctl函數 
20.7 塊設備驅動的I/O請求處理 
20.7.1 依賴請求隊列 
20.7.2 不依賴請求隊列 
20.8 實例1:依賴請求隊列的RamDisk 
20.9 在嵌入式設備上測試塊設備驅動 
20.9.1 編譯、配置和安裝Busybox 
20.9.2 測試塊設備驅動 
20.10 實例2:不依賴請求隊列的RamDisk 
20.11 扇區(qū)與磁盤碎片整理 
20.12 小結 第21章 網絡設備驅動 
21.1 Linux網絡設備驅動的結構 
21.1.1 網絡協(xié)議接口層 
21.1.2 網絡設備接口層 
21.1.3 設備驅動功能層 
21.1.4 網絡設備與媒介層 
21.2 網絡設備驅動設計與實現 
21.2.1 網絡設備的注冊與注銷 
21.2.2 網絡設備的初始化 
21.2.3 網絡設備的打開與釋放 
21.2.4 發(fā)送數據 
21.2.5 接收數據 
21.2.6 網絡連接狀態(tài) 
21.3 示例:DM9000網卡設備驅動 
21.3.1 如何確定S3C6410開發(fā)板使用的網絡設備 
21.3.2 DM9000網卡硬件描述 
21.3.3 網絡設備驅動的定義與安裝 
21.3.4 初始化DM9000網卡設備驅動 
21.3.5 移出網絡設備 
21.3.6 打開和停止DM9000網卡 
21.3.7 發(fā)送數據 
21.3.8 接收數據 
21.3.9 設置廣播地址 
21.4 小結 第22章 USB驅動 
22.1 USB設備簡介 
22.2 USB驅動與USB核心之間的交互 
22.2.1 端點(Endpoint) 
22.2.2 接口(Interfaces) 
22.2.3 配置(Config) 
22.3 USB設備的核心數據結構 
22.3.1 USB設備:usb_device結構體 
22.3.2 USB驅動:usb_driver結構體 
22.3.3 識別USB設備:usb_device_id結構體 
22.3.4 USB端點:usb_host_endpoint結構體 
22.3.5 USB接口:usb_interface結構體 
22.3.6 USB配置:usb_host_config結構體 
22.4 描述符數據結構 
22.4.1 設備描述符 
22.4.2 配置描述符 
22.4.3 接口描述符 
22.4.4 端點描述符 
22.4.5 字符串描述符 
22.4.6 查看描述符信息 
22.5 USB和sysfs 
22.6 URB(USB請求塊) 
22.6.1 URB結構體 
22.6.2 URB的處理流程 
22.6.3 簡單的批量與控制URB 
22.7 USB驅動程序的結構 
22.8 鼠標驅動分析 
22.9 小結

本目錄推薦

掃描二維碼
Copyright ? 讀書網 www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號