嵌入式Linux驅動開發教程

嵌入式Linux驅動開發教程

《嵌入式Linux驅動開發教程》 一書由華清遠見嵌入式學院、姜先剛、劉洪濤 編著,電子工業出版社2017年6月出版

內容提要

《嵌入式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

相關詞條

熱門詞條

聯絡我們