發表於2024-11-27
本書結閤大量實例,在基於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
前言
隨著嵌入式及物聯網技術地快速發展,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月
嵌入式Linux驅動開發教程 下載 mobi pdf epub txt 電子書 格式 2024
嵌入式Linux驅動開發教程 下載 mobi epub pdf 電子書還行
評分不錯的書!很好!!!!
評分?12345678999
評分書的質量好,內容不錯,很好。
評分不錯!!!!!!!
評分好好,正品
評分講的還行,關鍵是有帶設備樹的知識
評分嵌入式軟件驅動開發之經典,不可不看
評分好東西,老婆喜歡,性價比高
嵌入式Linux驅動開發教程 mobi epub pdf txt 電子書 格式下載 2024