-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Android驅動開發權威指南

( 簡體 字)
作者:楊 柳 編著類別:1. -> 程式設計 -> 手機程式 -> Android
譯者:
出版社:機械工業出版社Android驅動開發權威指南 3dWoo書號: 38002
詢問書籍請說出此書號!

缺書
不接受訂購

出版日:3/1/2014
頁數:320
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
不接受訂購
ISBN:9787111451822
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

Android開發的書籍比較多,但大多數或立足于Android的上層,講解如何開發Android應用,或偏重于Android Framework的繁雜機制,而缺乏講述Android驅動及具體實踐的書籍。由于工作的原因,本人正在根據多年Linux與Android驅動開發的經驗,整理相關的新員工培訓材料。為此,應張國強先生相邀,把相關資料整理成冊,以饗讀者,希望能讓讀者對Android有更深、更全面的理解,期待對從事Android驅動開發的工程人員的實際工作有所幫助。

我們知道Android底層是基于Linux內核的,因此要基于Android開發智能手機或終端,就少不了Linux內核與底層驅動的開發。據了解,這方面的開發人員目前還很缺乏,其中一個重要的原因就是Linux是一個與Windows一樣復雜的軟件系統,要理解它,本身不是一件容易的事,因此許多感興趣的讀者在翻閱相關書籍之后就知難而退了。根據個人的工作經驗,Linux內核和底層驅動的開發其實并沒有想象中的那么難,大概是相關書籍首先就講進程調度、信號同步等復雜技術,讓讀者立刻墜入云里霧里,特別是若沒弄明白設備驅動的本質,當真正講到相關驅動開發技術時,心氣已去了大半,更不用談利用所學的知識進行實踐了。

因此,我們在講述相關驅動開發基礎知識前,先讓大家初步了解Linux內核,再著手講設備輸入/輸出(I/O),接著由設備I/O引入DMA與中斷處理,再講驅動的并發處理技術,最后才講設備驅動向上層提供的同步與異步訪問方法。以設備I/O本質為源,根據前后因果,一層一層向讀者展現設備驅動開發的核心技術。只有這樣,我們在編寫或修改相應的Android驅動時,采用相關的技術才會得心應手,所創建的驅動才能健壯地與原有驅動與系統融為一體。而且經過這樣一個學習與實踐過程,相信讀者對于基于Linux內核的Android會有更清楚的認識。

Android驅動開發是一門工程性很強的技術,因此本書從實際開發需要出發,同時反復強調動手實踐。另外,我們認為一個合格的Android驅動程序開發工程師,除了要會編寫驅動程序,向上層程序提供相應設備模塊功能外,還應會編寫DVT(Design Verify Test)測試程序,以驗證所創建的驅動程序。因此在第三篇“Android驅動實踐篇”中,除了講解Android驅動開發原理,還講解了Android HAL等與Android驅動緊密相關的中間層知識;在講述具體Android設備子系統時,從該子系統整體工作機制出發,力求讓讀者理解開發的驅動如何成為相關子系統的有機部分,為Android驅動開發人員提供驅動開發以及DVT測試程序開發指導。

通過本書的學習,讀者將對Android整體有更深且更全面的認識。至于Android APK等程序開發的具體知識,相關的書籍與互聯網上有很多資料,讀者可以在進行具體DVT之類開發時,查閱相關技術的資料。

眾所周知,驅動開發是與操作系統緊密相關的,因此Android驅動開發的工作應該屬于系統級工程師的任務,要求我們比Android應用等開發人員知識面更廣,這一點在本人編寫本書時感觸特別深。站在許多前輩的肩膀上,糅合了自己的經驗與理解,歷時8個月,終于成稿,心中依然忐忑。Android系統可謂博大精深,加上自己才疏智淺,書中難免存在缺點與漏洞,歡迎大家提出寶貴意見,并不吝賜教。

最后默默期許,有讀者贊一聲“這書對Android驅動開發還有些用”,本人則不勝感激與欣慰!當然,還要感謝張國強先生及我的家人,正是他們的支持與鼓勵,才得以讓我堅持并最終完成了這本書。同時,還要感謝網上不知名的“大牛們”給予的無私幫助,正是你們,讓我相信中國的嵌入式驅動工程師隊伍一定會強大。

本書內容安排

本書的內容被劃分為三篇,共20章。

第一篇是Android概述篇,講述了Android的來龍去脈、Android軟件體系結構。它包含了兩章內容:

第1章Android的前世今生,講述了Android的起源、現狀與發展。

第2章Android體系結構,講述了Android的4層軟件架構、源代碼目錄組織及其開發環境的搭建。

第二篇是Linux驅動基礎篇,講述了Linux內核基礎知識,以及Linux驅動開發的關鍵技術。它包含了11章內容:

第3章Linux內核綜述,講述了Linux OS基本概念、進程管理、內存管理與文件系統。

第4章Linux內核編程與內核模塊,講述了Linux內核模塊模型、內核模塊編程,以及Linux內核源碼組織與編譯。

第5章Linux文件系統,根據Linux“一切皆文件”的核心要旨,著重講解了文件系統,特別是與設備驅動緊密相關的設備文件系統。

第6章Linux字符設備驅動,講述了字符設備驅動程序結構,并實現了一個虛擬化的字符設備,最后講解了如何通過設備文件名和設備驅動程序來訪問設備。

第7章Linux設備驅動中的內存與I/O訪問,講述了Linux設備驅動通過內存映射或分配I/O地址,實現對設備訪問的基礎原理。

第8章Linux設備驅動中的中斷,講述了Linux驅動的主處理流程與中斷處理異步機制,以及中斷響應與定時器技術。

第9章Linux設備驅動中的并發,講述Linux驅動中并發訪問存在的原因,以及解決并發競爭的同步訪問技術。

第10章Linux設備的阻塞式與非阻塞式訪問,講述了Linux向上層應用提供的阻塞式與非阻塞式兩類同步訪問設備模式,以及所要提供的相關支撐技術。

第11章Linux設備驅動中的異步訪問,講述了Linux向上層應用提供的非同步(即異步)訪問設備模式,以及Linux所要提供的相關支撐技術。

第12章Linux塊設備驅動,講述了Linux塊設備的I/O操作與字符設備的不同之處、塊設備驅動結構,以及關于塊設備驅動的相關支撐技術。

第13章Linux網絡設備驅動,講述了Linux網絡設備驅動架構體系、該類設備驅動結構,以及針對該類設備的I/O實現。

第三篇是Android驅動實踐篇,講述了Android HAL等Android驅動開發專有基礎知識,以及若干個實踐著Linux驅動的Android功能子系統,為Android驅動開發提供具體的幫助與指導。它包含了7章內容:

第14章Android HAL層的設計,講述了Android HAL層工作原理,并以虛擬驅動為例,列舉了針對具體驅動實現HAL層的實例。

第15章Framebuffer子系統,講述了Android基于Framebuffer實現顯示輸出的工作機理;從開發實踐出發,描述了Android Framebuffer子系統中經常遇到的相關硬件和相關驅動開發;還從系統角度講解了所開發的Framebuffer驅動如何與Android Framebuffer子系統融為一體,為Android用戶提供所需的顯示輸出服務。

第16章Input子系統,講述了Android Input子系統的工作機理;從開發實踐出發,以擴展鍵盤驅動為例,描述了Android Input子系統中相應驅動的開發;還從系統角度講解了鍵盤等Input類驅動如何與Android Input子系統融為一體,為Android用戶提供所需的輸入服務。

第17章V4L2子系統,講述了Android V4L2子系統的工作機理;從開發實踐出發,以OV5642 Camera驅動為例,講述了Android V4L2子系統中相應驅動的開發;還從系統角度講解了Camera等V4L2驅動如何與V4L2子系統融為一體,為Android用戶提供拍照、錄像等多媒體服務。

第18章Binder IPC通信子系統,講述了Android這個專有輕量級進程通信子系統的工作原理;描述了該子系統的Binder驅動底層支撐技術;還從系統的角度講解了Binder驅動如何與Binder IPC子系統融為一體,為Android中的應用、服務等進程提供進程間通信。

第19章USB子系統,講述了USB協議的基礎知識;描述了Android中USB底層驅動支撐技術;以USB Mass Storage為例,講解了USB驅動如何與USB子系統融為一體,為Android用戶提供USB相關服務。

第20章Bootloader引導子系統,講述了Bootloader的工作機理;從開發實踐出發,給出了若干Bootloader的修改指導。

本書特色

本書立足于Android驅動開發實踐,從開發者角度出發,主要有以下幾個特點:

實戰性強。體現在兩個方面,一是本書使用了大量的代碼和例子,其中有的代碼和例子稍做修改就可運用到具體的Android驅動開發中;二是講解相關技術內容時,處處站在開發者角度,整篇的編排都是根據作者多年開發經驗、從實戰出發合理組織的。

循序漸進。本書內容盡量由淺入深,逐層推進,力求讓稍有軟件和操作系統基礎的入門者也能看懂并能掌握相關的Android開發技術。

整體把握。本書始終強調避免將Android驅動與Android的其他組件部分割裂,而是從軟件工程系統的觀點,確保開發的驅動能成為Android的有機組成,為Android用戶提供實際的功能服務。
內容簡介:

知道Android最底層是基于Linux內核的,因此要基于Android開發智能手機或終端,就少不了Linux內核與底層驅動的開發。據了解,這方面的開發人員目前還很缺乏,其中一個重要的原因就是Linux是一個與Windows一樣復雜的軟件系統,要理解它,這本身不是一件容易的事,因此許多感興趣的讀者在翻閱相關書籍之后就知難而退了。然而,很多資深驅動工程師認為Linux內核和底層驅動的開發其實并沒有想像中的那么難。大概是相關書籍首先就講進程調度、信號同步等復雜技術,讓讀者立刻墜入云里霧里,特別是沒弄明白設備驅動的本質,當真正講到相關驅動開發技術時,心氣已去了大半,更不用談利用所學的知識進行實踐了。
因此,本書在講述相關的驅動開發基礎知識時,先讓大家初步了解Linux內核,再著手講設備輸入/輸出(I/O),接著由設備I/O引入DMA與中斷處理,再講驅動的并發處理技術,最后才講設備驅動向上層提供的同步與異步訪問方法。以設備I/O本質為源,根據前后因果關系,一層一層向讀者展現設備驅動開發的核心技術。只有這樣,我們在編寫或修改相應的Android驅動時,采用相關的技術才會得心應手,所創建的驅動才能健壯地與原有驅動和系統融為一體。而且經過這樣一個學習與實踐過程,相信讀者對于基于Linux內核的Android會有更清楚的認識。
目錄:

前言

第一篇 Android的前世今生——Android概述篇

第1章 Android的前世今生  2

1.1 Android的起源  2

1.2 開放手機聯盟  2

1.3 開源與相關協議  3

1.4 系統的升級與發展  3

第2章 Android體系結構  4

2.1 四層空間基本結構  4

2.1.1 Android系統底層開發  6

2.1.2 應用程序開發  7

2.2 Android代碼目錄結構  7

2.3 Android開發環境搭建  8

第二篇 勿于浮砂筑高臺——Linux驅動基礎篇

第3章 Linux 內核綜述  14

3.1 OS基本概念  14

3.1.1 多用戶系統  15

3.1.2 用戶和組  15

3.1.3 進程  16

3.1.4 Linux單核架構  16

3.2 Linux內核綜述  18

3.2.1 進程/內核模型綜述  18

3.2.2 內存管理綜述  26

3.2.3 文件系統綜述  29

3.2.4 設備驅動簡述  34

第4章 Linux內核編程與內核模塊  35

4.1 Linux內核源代碼目錄結構  35

4.2 Linux內核的編譯與啟動  36

4.3 Linux內核的C編程  37

4.4 Linux內核模塊基礎與骨架  43

4.5 Linux模塊的加載與卸載  46

4.6 Linux模塊的參數與導出符號  46

4.7 Linux模塊的使用計數  48

第5章 Linux文件系統  50

5.1 Linux文件系統概述  50

5.1.1 Linux文件系統的目錄結構  50

5.1.2 設備驅動與Linux文件系統的關聯  51

5.2 Linux設備文件系統  55

5.2.1 devfs設備文件系統  55

5.2.2 udev設備文件系統  56

5.2.3 sysfs文件系統與Linux設備  57

5.2.4 udev的組成  67

5.2.5 udev規則文件  68

第6章 Linux字符設備驅動  70

6.1 Linux字符設備驅動結構  70

6.1.1 cdev結構體  70

6.1.2 分配和釋放設備號  71

6.1.3 file_operations結構體  72

6.1.4 Linux字符設備驅動的組成  74

6.2 一個字符設備驅動例子——virtualchar  77

6.2.1 頭文件、宏及設備結構體  77

6.2.2 加載與卸載設備驅動  78

6.2.3 驅動函數實現  79

6.2.4 驅動設備私有數據  83

6.3 對virtualchar設備的訪問  90

第7章 Linux設備驅動中的內存與I/O訪問  92

7.1 CPU與內存和I/O之間的故事  92

7.1.1內存空間與I/O空間  92

7.1.2 內存管理單元MMU  93

7.2 Linux內存管理  97

7.3 Linux內存訪問  99

7.4 Linux I/O訪問  102

7.4.1 訪問I/O  102

7.4.2 申請與釋放I/O資源  105

7.4.3 I/O訪問流程  107

7.4.4 設備地址與用戶空間的映射  107

7.5 DMA  114

7.5.1 DMA與Cache的一致性  114

7.5.2 Linux下的DMA編程  114

第8章 Linux設備驅動中的中斷  125

8.1 Linux中斷及中斷處理架構  125

8.2 Linux中斷編程  126

8.2.1 申請和釋放中斷  126

8.2.2 使能與屏蔽中斷  127

8.2.3 底半部機制  127

8.2.4 中斷共享  130

8.3 Linux定時器  132

8.4 Linux延時處理  134

8.4.1 短延時  135

8.4.2 長延時  135

8.4.3 睡眠延時  136

第9章 Linux設備驅動中的并發  138

9.1 Linux中的并發與競爭  138

9.2 Linux中常用的同步訪問技術  139

9.2.1 中斷屏蔽  139

9.2.2 原子操作  140

9.2.3 自旋鎖  142

9.2.4 信號量  147

9.2.5 互斥燈  152

9.3 增加并發控制的virtualchar驅動  153

第10章 Linux設備的阻塞式與非阻塞式訪問  157

10.1 阻塞式與非阻塞式訪問  157

10.1.1 等待隊列  158

10.1.2 支持阻塞操作的virtualfifo設備驅動  162

10.2 Linux的輪詢訪問  167

10.2.1 應用程序中的輪詢編程  167

10.2.2 設備驅動中的輪詢編程  168

10.2.3 支持輪詢操作的virtualfifo驅動  169

第11章 Linux設備驅動中的異步訪問  171

11.1 Linux 2.6 中的異步訪問  171

11.1.1 異步訪問概念與GNU C庫函數  171

11.1.2 使用信號作為異步訪問的通知  175

11.1.3 使用回調函數作為異步訪問的通知  177

11.1.4 異步訪問與設備驅動  178

11.2 異步Fifo驅動例子  180

11.2.1 在virtualfifo驅動中增加異步通知  180

11.2.2 在用戶空間驗證virtualfifo的異步通知  182

第12章 Linux塊設備驅動  184

12.1 塊設備的I/O操作特點  184

12.2 Linux塊設備驅動結構  184

12.2.1 block_device_operations結構體  184

12.2.2 gendisk結構體  186

12.2.3 request與bio結構體  188

12.2.4 塊設備驅動注冊與注銷  197

12.3 Linux塊設備驅動的模塊加載與卸載  198

12.4 塊設備的打開/釋放/IOCTL  200

第13章 Linux網絡設備驅動  202

13.1 Linux網絡設備驅動體系結構  202

13.2 Linux網絡設備驅動結構  203

13.3 Linux網絡設備驅動I/O實現  204

13.3.1 網絡設備初始化  204

13.3.2 網絡數據包的收發  205

第三篇 實踐出真知——Android驅動實踐篇

第14章 Android HAL層的設計  208

14.1 Android HAL概述  208

14.2 為Android開發虛擬驅動virtualio  209

14.3 Android集成C程序訪問virtualio  220

14.4 Android通過HAL訪問virtualio  222

14.4.1 virtualio HAL模塊實現  222

14.4.2 實現訪問virtualio HAL模塊JNI  226

14.4.3 在Framework層增加virtualio服務  229

第15章 Framebuffer子系統  231

15.1 Linux Framebuffer一般子系統  231

15.1.1 Framebuffer數據結構  231

15.1.2 Framebuffer驅動  237

15.2 Android Framebuffer子系統實踐  238

15.2.1 硬件基礎  238

15.2.2 CPU側顯示驅動模塊  240

15.2.3 LCM驅動模塊  242

15.3 Android系統對Framebuffer的使用  247

第16章 Input子系統  249

16.1 Linux Input一般子系統  249

16.1.1 Input數據結構  250

16.1.2 Input內核模塊  252

16.2 Android Input子系統實踐  257

16.2.1 硬件基礎  258

16.2.2 Input驅動模塊  258

16.3 Android系統對Input的使用  263

第17章 V4L2子系統  266

17.1 Linux V4L2一般子系統  266

17.1.1 V4L2數據結構  266

17.1.2 V4L2接口  268

17.1.3 V4L2虛擬驅動vivi  273

17.2 Android V4L2實踐  279

17.2.1 硬件基礎  280

17.2.2 CPU側CCIC驅動模塊  281

17.2.3 OV5642模組驅動模塊  283

17.3 Android系統對V4L2的使用  286

第18章 Binder IPC通信子系統  288

18.1 Binder驅動概述  288

18.2 Binder通信模型  288

18.3 Binder驅動  291

18.3.1 Binder相關的結構體  292

18.3.2 Android Binder子系統的架構設計  292

18.4 Binder的工作流程  293

第19章 USB子系統  295

19.1 USB協議基礎知識  295

19.1.1 USB物理連接  295

19.1.2 USB通信協議  297

19.2 USB子系統底層  299

19.2.1 USB Core  299

19.2.2 Linux USB gadget三層架構  303

19.3 Android USB子系統實踐  305

19.3.1 Android IPC通信補充  305

19.3.2 Android USB Mass Storage流程分析  309

第20章 Bootloader引導子系統  312

20.1 Bootloader流程分析  312

20.1.1 Bootloader概述  312

20.1.2 U-Boot啟動流程分析  314

20.2 Bootloader修改指南  317

20.2.1 開機第一幀圖的修改  317

20.2.2 開機模式的定制  318

參考文獻  321
序: