-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
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書號
詳細書籍分類

嵌入式Linux驅動開發教程

( 簡體 字)
作者:華清遠見嵌入式學院,姜先剛,劉洪濤類別:1. -> 作業系統 -> Linux
譯者:
出版社:電子工業出版社嵌入式Linux驅動開發教程 3dWoo書號: 46885
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:6/1/2017
頁數:400
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121313592
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

隨著嵌入式及物聯網技術地快速發展,ARM處理器已經廣泛地應用到了工業控制、智能儀表、汽車電子、醫療電子、軍工電子、網絡設備、消費類電子、智能終端等領域。而較新的ARM Cortex-A9架構的四核處理器更是由于其優越的性能被廣泛應用到了中高端的電子產品市場。比如基于ARM Cortex-A9的三星Exynos4412處理器就被應用在了三星GALAXY Note II智能手機上。
另外,Linux內核由于其高度的穩定性和可裁剪性等特點,被廣泛地應用到了嵌入式系統,Android系統就是一個典型的例子。這樣,ARM處理器就和Linux操作系統緊密地聯系在了一起。所以,基于ARM和Linux的嵌入式系統就得到了快速的發展。
嵌入式系統是一個定制的系統,所以千變萬化、形形色色的硬件都必須要有對應的驅動才能使其正常工作,為這些硬件設備編寫驅動就是不可避免的了。雖然有很多內核開發人員已經為很多常見的硬件開發了驅動,但是驅動的升級一般都跟不上新硬件的升級。筆者就多次遇到過內核的驅動和同一系列的升級版本芯片不匹配的情況,這時就要改寫驅動程序。所以內核層次的底層開發幾乎都要和驅動打交道。另外,了解驅動(或者說內核)的一些底層工作原理,也有助于我們寫出更穩定、更高效的應用層代碼。
為了能夠實現這一目標,并促進嵌入式技術的推廣,華清遠見研發中心自主研發了一套基于Exynos4412處理器的開發板FS4412,并組織編寫了本書。本書注重實踐、實用,沒有用長篇大論來反復強調一些旁枝末節的內容,但是對于會影響理解的部分又非常詳細地分析了內核源碼,并給出了大量的圖示。書中的各個實例雖然為了突出相關的知識重點而簡化了對某些問題的討論,不能稱得上工程上嚴格意義的好驅動,但是確實也具備了對應的設備驅動開發所必需的各方面。實例按照工程上驅動開發的增量式方式來進行,即先有主體再逐漸完善,循序漸進。讀者按照實例能夠迅速掌握對應驅動的開發精要,對整個驅動的實現也就有了一個清晰的思路。
本書共14章,循序漸進地講解了嵌入式Linux設備驅動開發所涉及的理論基礎和大量API說明,并配有大量驅動實例。全書主要分為五部分:第一部分是Linux設備驅動開發的概述,包含第1章;第二部分是模塊及字符設備驅動的理論,包含第2∼8章;第三部分是字符設備驅動實例,包含第9章和第10章;第四部分是Linux塊設備驅動和網絡設備驅動,包含第11章和第12章;最后一部分是Linux內核的調試和開發環境的搭建,包含第13章和第14章。各章節的主要內容如下。
第1章概述了需要了解Linux驅動程序的人群、Linux驅動開發的特點和本書其他各章節的核心內容。
第2章對Linux內核的模塊進行了介紹,現在的驅動幾乎都以Linux內核模塊的形式來實現,所以這是后續的基礎。
第3章講解Linux字符設備驅動的主體框架,并以一個假想的串口來實現驅動。這是Linux設備驅動入門的關鍵,所以分析了大量的內核源碼。當然,這個驅動是不完善的,需要在后面的各章節逐步添加功能。
第4章在上一章的基礎上探討了字符設備的高級I/O操作,包括ioctl、阻塞、I/O多路復用、異步通知、mmap、定位等,還特別介紹了proc相關的接口。
第5章講解中斷和時間管理,為便于理解,特別加入了中斷進入的內核源碼分析。時間管理則包含了延時和定時兩部分,在定時部分還討論了新內核中的高分辨率定時器。
第6章講解了互斥和同步,為了讓讀者明白互斥對驅動開發的重要性,特別從ARM匯編的層次來討論了競態。除了對傳統的互斥(自旋鎖、信號量等)進行討論外,還特別說明了RCU機制和使用的范例。
第7章講解了內核中內存的各種分配方式,還特別談到了per-CPU變量的使用。最后,對DMA的討論則專注于新內核引入的dmaengine子系統,并用一個實例進行了具體的展現。
第8章講解了Linux設備模型,這部分內容比較抽象。為了能幫助讀者理解這部分內容,專門實現了設備、總線、驅動三個最簡單的實例,從而使讀者完全掌握三者之間的關系。這一章的后半部分有大量實用技術的展現,包括電源管理、驅動的自動加載、設備節點的自動創建等。最后還講解了較新的內核引入的ARM體系結構的設備樹。
第9章在前面的理論基礎上實現了大量外設的驅動。這些驅動并不都是通過字符設備框架來實現的,目的就是想告訴讀者,如果我們能夠簡化驅動的編寫,就盡量簡化驅動的編寫,多使用內核中已經實現的機制。
第10章講解了總線類設備驅動的開發,對流行的I2C總線、SPI總線、USB總線和PCI總線都進行了討論。這些總線都有一個共同的特性,就是都有主機控制器和連接在總線上的設備,我們只討論了在主機控制器驅動之上的設備驅動,不討論主機控制器驅動及設備自身的固件或驅動,因為設備驅動是最常開發的驅動。
第11章講解了塊設備驅動,為了便于讀者對這部分知識進行理解,特別介紹了磁盤的內部結構,然后用內存虛擬了一個磁盤,用兩種方式實現了該虛擬磁盤的塊設備驅動。
第12章講解了網絡設備驅動,用一個虛擬的環回以太網卡的驅動展現了網絡設備驅動的主體框架,還分析了DM9000網卡驅動的主體框架部分,并和前面的虛擬網卡驅動進行了對比。
第13章介紹了內核的一些調試技術。內核的調試相對來說比較麻煩,但只要能熟練使用這些調試技術,還是能較快找出問題所在的。
第14章是嵌入式Linux設備驅動開發環境的搭建,包含了主機系統的準備和各個軟件的安裝。尤其是用vim搭建了一個適合于驅動開發的類似于IDE的編輯環境,能夠大大提高代碼的編寫效率。
本書由華清遠見成都中心的姜先剛編寫,北京中心的劉洪濤承擔全書的統稿及審校工作,是賈燕楓、楊曼、袁祖剛、關曉強、譚翠君、李媛媛、張丹、張志華、曹忠明、苗德行、馮利美、盧閆進、蔡蒙等老師心血的結晶,也是他們多年教學成果的積累。他們認真閱讀了書稿,提出了大量的建議,并糾正了書稿中的很多錯誤,在此特表示感謝。
由于作者水平有限,書中不妥之處在所難免,懇請讀者批評指正。對于本書的批評和建議,可以發表到www.farsight.com.cn技術論壇。
編 者
2017年3月
內容簡介:

本書結合大量實例,在基于ARM Cortex-A9四核處理器Exynos4412的硬件教學平臺和PC機上,全面詳細講解了Linux設備驅動開發。主要內容包含開發環境的搭建,內核模塊,字符設備驅動框架,高級I/O,中斷和時間管理,互斥和同步,內存和DMA,Linux設備模型,外設的驅動實例,總線類設備驅動,塊設備驅動,網絡設備驅動和內核調試技巧。對每一個知識點都有一個對應的典型實例,大多數實例既可以在上面說到的嵌入式平臺上運行,也可以在PC機上運行。

目錄:

第1章 概述 1
第2章 內核模塊 6
2.1 第一個內核模塊程序 7
2.2 內核模塊的相關工具 10
2.3 內核模塊一般的形式 11
2.4 將多個源文件編譯生成一個內核模塊 13
2.5 內核模塊參數 15
2.6 內核模塊依賴 17
2.7 關于內核模塊的進一步討論 20
2.8 習題 21
第3章 字符設備驅動 23
3.1 字符設備驅動基礎 24
3.2 字符設備驅動框架 30
3.3 虛擬串口設備 35
3.4 虛擬串口設備驅動 35
3.5 一個驅動支持多個設備 39
3.6 習題 45
第4章 高級I/O操作 46
4.1 ioctl設備操作 47
4.2 proc文件操作 56
4.3 非阻塞型I/O 58
4.4 阻塞型I/O 60
4.5 I/O多路復用 65
4.6 異步I/O 69
4.7 幾種I/O模型總結 73
4.8 異步通知 74
4.9 mmap設備文件操作 83
4.10 定位操作 88
4.11 習題 90
第5章 中斷和時間管理 92
5.1 中斷進入過程 93
5.2 驅動中的中斷處理 98
5.3 中斷下半部 101
5.3.1 軟中斷 102
5.3.2 tasklet 104
5.3.3 工作隊列 106
5.4 延時控制 108
5.5 定時操作 109
5.5.1 低分辨率定時器 109
5.5.2 高分辨率定時器 112
5.6 習題 114
第6章 互斥和同步 116
6.1 一種典型的競態 117
6.2 內核中的并發 117
6.3 中斷屏蔽 118
6.4 原子變量 119
6.5 自旋鎖 120
6.6 讀寫鎖 122
6.7 順序鎖 123
6.8 信號量 125
6.9 讀寫信號量 127
6.10 互斥量 127
6.11 RCU機制 128
6.12 虛擬串口驅動加入互斥 130
6.13 完成量 134
6.14 習題 135
第7章 內存和DMA 137
7.1 內存組織 138
7.2 按頁分配內存 139
7.3 slab分配器 142
7.4 不連續內存頁分配 144
7.5 per-CPU變量 145
7.6 動態內存實例 146
7.7 I/O內存 147
7.8 DMA原理及映射 155
7.8.1 DMA工作原理 155
7.8.2 DMA映射 157
7.9 DMA統一編程接口 160
7.10 習題 164
第8章 Linux設備模型 166
8.1 設備模型基礎 167
8.2 總線、設備和驅動 171
8.3 平臺設備及其驅動 176
8.3.1 平臺設備 176
8.3.2 平臺驅動 178
8.3.3 平臺驅動簡單實例 179
8.3.4 電源管理 182
8.3.5 udev和驅動的自動加載 183
8.3.6 使用平臺設備的LED驅動 184
8.3.7 自動創建設備節點 190
8.4 Linux設備樹 193
8.4.1 Linux設備樹的由來 193
8.4.2 Linux設備樹的目的 194
8.4.3 Linux設備樹的使用 195
8.4.4 使用設備樹的LED驅動 202
8.5 習題 204
第9章 字符設備驅動實例 205
9.1 LED驅動 206
9.2 基于中斷的簡單按鍵驅動 209
9.3 基于輸入子系統的按鍵驅動 213
9.4 ADC驅動 222
9.5 PWM驅動 231
9.6 RTC驅動 239
第10章 總線類設備驅動 243
10.1 I2C設備驅動 244
10.1.1 I2C協議簡介 244
10.1.2 Linux I2C驅動 246
10.1.3 I2C設備驅動實例 251
10.2 SPI設備驅動 258
10.2.1 SPI協議簡介 258
10.2.2 Linux SPI驅動 259
10.2.3 SPI設備驅動范例 264
10.3 USB設備驅動 268
10.3.1 USB協議簡介 268
10.3.2 Linux USB驅動 271
10.3.3 USB設備驅動實例 274
10.4 PCI設備驅動 283
10.4.1 PCI協議簡介 283
10.4.2 Linux PCI驅動 287
10.4.3 PCI設備驅動實例 288
10.5 習題 296
第11章 塊設備驅動 298
11.1 磁盤結構 299
11.2 塊設備內核組件 300
11.3 塊設備驅動核心數據結構和函數 301
11.4 塊設備驅動實例 308
11.5 習題 316
第12章 網絡設備驅動 317
12.1 網絡層次結構 318
12.2 網絡設備驅動核心數據結構和函數 319
12.3 網絡設備驅動實例 327
12.4 DM9000網絡設備驅動代碼分析 333
12.5 NAPI 340
12.6 習題 343

第13章 內核調試技術 344
13.1 內核調試方法 345
13.1.1 內核調試概述 345
13.1.2 學會分析內核源程序 346
13.1.3 調試方法介紹 346
13.2 內核打印函數 350
13.2.1 內核鏡像解壓前的串口輸出函數 350
13.2.2 內核鏡像解壓后的串口輸出函數 352
13.2.3 內核打印函數 353
13.3 獲取內核信息 357
13.3.1 系統請求鍵 357
13.3.2 通過/proc接口 358
13.3.3 通過/sys接口 359
13.4 處理出錯信息 362
13.4.1 oops信息 362
13.4.2 panic 364
13.4.3 通過ioctl方法 366
13.5 內核源碼調試 367
13.6 習題 369
第14章 搭建開發環境 370
14.1 準備Linux開發主機 371
14.2 安裝串口相關軟件 375
14.2.1 安裝串口驅動 375
14.2.2 安裝串口終端軟件PuTTY 376
14.2.3 安裝串口終端軟件minicom 377
14.3 安裝TFTP和NFS服務器 379
14.4 準備Linux內核源碼 381
14.5 在目標板上運行Linux系統 382
14.6 源碼瀏覽及編輯器環境 386
習題答案 388
參考文獻 389
序: