linux設備驅動開發(2021年人民郵電出版社出版的圖書)

linux設備驅動開發(2021年人民郵電出版社出版的圖書)

本詞條是多義詞,共2個義項
更多義項 ▼ 收起列表 ▲

《linux設備驅動開發》是2021年3月人民郵電出版社出版的圖書。本書概述了Linux驅動開發的基礎知識以及所用到的開發環境,全書分為22章,其內容涵蓋了各種Linux子系統,包含記憶體管理、PWM、RTC、IIO和IRQ管理等,還講解了直接記憶體訪問和網路設備驅動程式的實用方法。

基本介紹

  • 中文名:linux設備驅動開發
  • 作者:[法]約翰·馬迪厄(John Madieu)
  • 出版社:人民郵電出版社
  • ISBN:9787115555557
內容簡介,圖書目錄,作者簡介,

內容簡介

本書講解了Linux驅動開發的基礎知識以及所用到的開發環境,全書分為22章,其內容涵蓋了各種Linux子系統,包含記憶體管理、PWM、RTC、IIO和IRQ管理等,還講解了直接記憶體訪問和網路設備驅動程式的實用方法。在學完本書之後,讀者將掌握設備驅動開發環境的概念,並可以從零開始為任何硬體設備編寫驅動程式。
閱讀本書需要具備基本的C語言程式設計能力,且熟悉Linux基本命令。本書主要是為嵌入式工程師、Linux系統管理員、開發人員和核心黑客而設計的。無論是軟體開發人員,還是系統架構師或製造商,只要願意深入研究Linux驅動程式開發,閱讀本書後都將有所收穫。

圖書目錄

第 1章 核心開發簡介 1
1.1 環境設定 1
1.1.1 獲取原始碼 2
1.1.2 核心配置 4
1.1.3 構建自己的核心 4
1.2 核心約定 6
1.2.1 編碼風格 6
1.2.2 核心結構分配和初始化 7
1.2.3 類、對象、面向對象的編程 7
1.3 總結 8
第 2章 設備驅動程式基礎 9
2.1 核心空間和用戶空間 9
2.1.1 模組的概念 10
2.1.2 模組依賴 10
2.1.3 模組的載入和卸載 11
2.2 驅動程式框架 13
2.2.1 模組的入點和出點 14
2.2.2 模組信息 16
2.3 錯誤和訊息列印 18
2.3.1 錯誤處理 19
2.3.2 處理空指針錯誤 21
2.3.3 訊息列印—— printk( ) 22
2.4 模組參數 24
2.5 構建第 一個模組 25
2.5.1 模組的makefile 26
2.5.2 核心樹內 27
2.5.3 核心樹外 29
2.5.4 構建模組 29
2.6 總結 30
第3章 核心工具和輔助函式 31
3.1 理解宏container_of 31
3.2 鍊表 33
3.2.1 創建和初始化鍊表 35
3.2.2 創建鍊表節點 36
3.2.3 添加鍊表節點 36
3.2.4 刪除鍊表節點 37
3.2.5 鍊表遍歷 37
3.3 核心的睡眠機制 38
3.4 延遲和定時器管理 41
3.4.1 標準定時器 41
3.4.2 高精度定時器(HRT) 44
3.4.3 動態Tick/Tickless核心 46
3.4.4 核心中的延遲和睡眠 46
3.5 核心的鎖機制 47
3.5.1 互斥鎖 47
3.5.2 自旋鎖 49
3.6 工作延遲機制 51
3.6.1 Softirq和Ksoftirqd 51
3.6.2 Tasklet 53
3.6.3 Tasklet調度 54
3.6.4 工作佇列 56
3.6.5 核心執行緒 62
3.7 核心中斷機制 62
3.7.1 註冊中斷處理程式 62
3.7.2 下半部的概念 65
3.8 執行緒化中斷 68
3.9 從核心調用用戶空間應用程式 71
3.10 總結 72
第4章 字元設備驅動程式 73
4.1 主設備和次設備的概念 73
4.2 設備檔案操作 76
4.3 分配和註冊字元設備 77
4.4 寫檔案操作 79
4.4.1 核心空間和用戶空間數據交換 79
4.4.2 open方法 80
4.4.3 release方法 81
4.4.4 write方法 82
4.4.5 read方法 84
4.4.6 llseek方法 86
4.4.7 poll方法 88
4.4.8 ioctl方法 91
4.4.9 填充file_operations結構 95
4.5 總結 95
第5章 平台設備驅動程式 96
5.1 平台驅動程式 97
5.2 平台設備 100
5.3 設備、驅動程式和匯流排匹配 105
5.4 總結 113
第6章 設備樹的概念 114
6.1 設備樹機制 114
6.1.1 命名約定 115
6.1.2 別名、標籤和phandle 115
6.1.3 DT編譯器 117
6.2 表示和定址設備 117
6.2.1 SPI和I2C定址 118
6.2.2 平台設備定址 119
6.3 處理資源 120
6.3.1 命名資源的概念 121
6.3.2 訪問暫存器 122
6.3.3 處理中斷 123
6.3.4 提取特定套用數據 124
6.4 平台驅動程式和DT 127
6.4.1 OF匹配風格 127
6.4.2 匹配風格混合 132
6.4.3 平台數據與DT 136
6.5 總結 137
第7章 I2C客戶端驅動程式 138
7.1 驅動程式架構 139
7.1.1 i2c_driver結構 139
7.1.2 驅動程式的初始化和註冊 142
7.1.3 驅動程式和設備的配置 142
7.2 訪問客戶端 143
7.2.1 普通I2C通信 143
7.2.2 系統管理匯流排(SMBus)兼容函式 145
7.2.3 在開發板配置檔案中實例化I2C設備(棄用的舊方式) 146
7.3 I2C和設備樹 147
7.3.1 定義和註冊I2C驅動程式 147
7.3.2 在設備樹中實例化I2C設備——新方法 149
7.3.3 小結 149
7.4 總結 150
第8章 SPI設備驅動程式 151
8.1 驅動程式架構 151
8.1.1 設備結構 152
8.1.2 spi_driver結構 154
8.1.3 驅動程式的初始化和註冊 156
8.1.4 驅動程式和設備配置 157
8.2 訪問和與客戶端通信 161
8.3 小結 166
8.4 SPI用戶模式驅動程式 166
8.5 總結 170
第9章 Regmap API ——暫存器映射抽象 171
9.1 使用Regmap API編程 172
9.1.1 regmap_config結構 172
9.1.2 Regmap初始化 175
9.1.3 設備訪問函式 177
9.1.4 Regmap和快取 180
9.1.5 小結 181
9.1.6 Regmap示例 182
9.2 總結 184
第 10章 IIO框架 185
10.1 IIO數據結構 186
10.1.1 Iio_dev數據結構 186
10.1.2 iio_info結構 190
10.1.3 IIO通道 190
10.1.4 小結 196
10.2 觸發緩衝區支持 199
10.2.1 IIO觸發器和sysfs(用戶空間) 202
10.2.2 IIO緩衝區 206
10.2.3 小結 208
10.3 IIO數據訪問 214
10.3.1 單次捕獲 214
10.3.2 緩衝區數據訪問 214
10.4 IIO工具 216
10.5 總結 217
第 11章 核心記憶體管理 218
11.1 系統記憶體布局——核心空間和用戶空間 219
11.1.1 核心地址——低端和高端記憶體概念 221
11.1.2 用戶空間定址 222
11.1.3 虛擬記憶體區域 225
11.2 地址轉換和MMU 227
11.3 記憶體分配機制 232
11.3.1 頁面分配器 233
11.3.2 Slab分配器 235
11.3.3 kmalloc分配系列 238
11.3.4 vmalloc分配器 240
11.3.5 後台的進程記憶體分配 242
11.4 使用I/O記憶體訪問硬體 244
11.4.1 PIO設備訪問 244
11.4.2 MMIO設備訪問 245
11.5 記憶體(重)映射 248
11.5.1 kmap 248
11.5.2 映射核心記憶體到用戶空間 249
11.6 Linux快取系統 253
11.6.1 什麼是快取 253
11.6.2 為什麼數據延遲寫入磁碟 255
11.7 設備管理的資源—— Devres 256
11.8 總結 257
第 12章 DMA ——直接記憶體訪問 258
12.1 設定DMA映射 258
12.1.1 快取一致性和DMA 258
12.1.2 DMA映射 259
12.2 完成的概念 263
12.3 DMA引擎API 264
12.3.1 分配DMA從通道 265
12.3.2 設定從設備和控制器指定參數 266
12.3.3 獲取事務描述符 269
12.3.4 提交事務 270
12.3.5 發布待處理DMA請求並等待回調通知 271
12.4 總結—— NXP SDMA(i.MX6) 272
12.5 DMA DT綁定 277
12.6 總結 278
第 13章 Linux設備模型 279
13.1 LDM數據結構 279
13.1.1 匯流排 280
13.1.2 設備驅動程式 285
13.1.3 設備 287
13.2 深入剖析LDM 289
13.2.1 kobject結構 289
13.2.2 kobj_type 291
13.2.3 核心對象集合 293
13.2.4 屬性 294
13.3 設備模型和sysfs 296
13.3.1 sysfs檔案和屬性 297
13.3.2 允許輪詢sysfs屬性檔案 303
13.4 總結 304
第 14章 引腳控制和GPIO子系統 305
14.1 引腳控制子系統 305
14.2 GPIO子系統 310
14.2.1 基於整數的GPIO接口:傳統方法 310
14.2.2 基於描述符的GPIO接口:新的推薦方式 315
14.2.3 GPIO接口和設備樹 322
14.2.4 GPIO和sysfs 327
14.3 總結 329
第 15章 GPIO控制器驅動程式—— gpio_chip 330
15.1 驅動程式體系結構和數據結構 330
15.2 引腳控制器指南 334
15.3 GPIO控制器的sysfs接口 335
15.4 GPIO控制器和DT 335
15.5 總結 336
第 16章 高級IRQ管理 337
16.1 中斷復用和中斷控制器 339
16.2 高級外設IRQ管理 347
16.3 中斷請求和傳播 349
16.3.1 連結IRQ 351
16.3.2 案例研究—— GPIO和IRQ晶片 351
16.4 總結 356
第 17章 輸入設備驅動程式 357
17.1 輸入設備結構 357
17.2 分配並註冊輸入設備 360
17.3 產生和報告輸入事件 364
17.4 用戶空間接口 366
17.5 回顧 368
17.6 總結 376
第 18章 RTC驅動程式 377
18.1 RTC框架數據結構 377
18.2 RTC和用戶空間 387
18.2.1 sysfs接口 387
18.2.2 hwclock工具 388
18.3 總結 389
第 19章 PWM驅動程式 390
19.1 PWM控制器驅動程式 391
19.1.1 驅動程式示例 393
19.1.2 PWM控制器綁定 396
19.2 PWM消費者接口 397
19.3 通過sysfs接口使用PWM 401
19.4 總結 402
第 20章 調節器框架 403
20.1 PMIC/生產者驅動程式接口 404
20.1.1 驅動程式數據結構 404
20.1.2 驅動程式方法 412
20.1.3 驅動程式示例 418
20.2 調節器消費者接口 421
20.2.1 調節器設備請求 422
20.2.2 控制調節器設備 423
20.3 調節器綁定 425
20.4 總結 426
第 21章 幀緩衝驅動程式 427
21.1 驅動程式數據結構 428
21.2 設備方法 431
21.3 驅動程式方法 434
21.3.1 fb_ops剖析 436
21.3.2 總結 440
21.4 用戶空間的幀緩衝 440
21.5 總結 442
第 22章 網路接口卡驅動程式 443
22.1 驅動程式數據結構 443
22.1.1 套接字緩衝區結構 444
22.1.2 網路接口結構 446
22.2 設備方法 448
22.2.1 打開和關閉 449
22.2.2 數據包處理 452
22.2.3 驅動程式示例 457
22.2.4 狀態和控制 460
22.3 驅動程式方法 463
22.3.1 probe函式 464
22.3.2 模組卸載 466
22.4 總結 466

作者簡介

John Madieu是嵌入式Linux和核心研發工程師,居住在法國巴黎。他主要為自動化、運輸、醫療、能源和軍事等領域的公司開發驅動程式和開發板支持包(Board Support Packages,BSP)。他目前就職於一家法國公司EXPEMB,該公司是基於模組化計算機的電子開發板設計和嵌入式Linux解決方案的先驅。同時,他還是一位開源和嵌入式系統愛好者,堅信通過知識分享能夠學到更多的知識。

相關詞條

熱門詞條

聯絡我們