內容提要
《嵌入式Linux驅動開發教程》結合大量實例,在基於ARM Cortex-A9四核處理器Exynos4412的硬體教學平台和PC上,全面詳細地講解了Linux設備驅動開發。主要內容包括開發環境的搭建、核心模組、字元設備驅動框架、高級I/O、中斷和時間管理、互斥和同步、記憶體和DMA、Linux設備模型、外設的驅動實例、匯流排類設備驅動、塊設備驅動、網路設備驅動和核心調試技術。每一個知識點都有一個對應的典型實例,大多數實例既可以在上面說到的嵌入式平台上運行,也可以在PC上運行。另外,《嵌入式Linux驅動開發教程》也引入了新核心的一些新特性,比如高解析度定時器、針對嵌入式平台的dmaengine和設備樹。在需要重點關注的地方還加入了大量的核心源碼分析,使讀者能夠快速並深刻理解Linux設備驅動的開發。
《嵌入式Linux驅動開發教程》可作為大學院校電子、通信、計算機、自動化等專業的嵌入式Linux設備驅動開發課程的教材,也可供嵌入式Linux驅動開發人員參考。
目錄
第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