Linux設備驅動開發 版權信息
- ISBN:9787302619024
- 條形碼:9787302619024 ; 978-7-302-61902-4
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>
Linux設備驅動開發 本書特色
《Linux設備驅動開發》提供了有關Linux內核主題的較為全面的討論(例如,市面圖書中通常較少涉及的視頻和音頻框架,本書也有專門章節進行介紹)。我們將深入研究一些*復雜和*具影響力的Linux內核框架,如PCI、用于SoC的ALSA和Video4Linux2(V4L2),并在此過程中提供了一些專業技巧提示和*佳實踐。
Linux設備驅動開發 內容簡介
《Linux設備驅動開發》本書詳細闡述了與Linux設備驅動開發相關的基本解決方案,主要包括Linux內核概念、regmap API應用、MFD子系統和syscon API、通用時鐘框架、ALSA SoC框架、V4L2和視頻采集、集成V4L2異步和媒體控制器框架、V4L2 API、Linux內核電源管理、PCI設備驅動、NVMEM框架、看門狗設備驅動、Linux內核調試技巧和**實踐等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。
本書詳細闡述了與Linux設備驅動開發相關的基本解決方案,主要包括Linux內核概念、regmap API應用、MFD子系統和syscon API、通用時鐘框架、ALSA SoC框架、V4L2和視頻采集、集成V4L2異步和媒體控制器框架、V4L2 API、Linux內核電源管理、PCI設備驅動、NVMEM框架、看門狗設備驅動、Linux內核調試技巧和**實踐等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。
Linux設備驅動開發 目錄
第1篇 用于嵌入式設備驅動程序開發的內核核心框架
第1章 嵌入式開發人員需要掌握的Linux內核概念 3
1.1 技術要求 3
1.2 內核鎖API和共享對象 3
1.2.1 自旋鎖 4
1.2.2 禁用中斷與僅禁用搶占 8
1.2.3 互斥鎖 8
1.2.4 try-lock方法 11
1.3 Linux內核中的等待、感知和阻塞 13
1.3.1 等待活動完成或狀態改變 13
1.3.2 Linux內核等待隊列 15
1.4 工作延遲機制 19
1.4.1 softIRQ 20
1.4.2 關于ksoftirqd 24
1.4.3 tasklet 25
1.4.4 工作隊列 28
1.4.5 內核共享隊列 31
1.4.6 新的工作隊列 32
1.4.7 并發管理的工作隊列 33
1.5 Linux內核中斷管理 37
1.5.1 中斷的狀態 37
1.5.2 中斷處理流程 38
1.5.3 設計中斷處理程序 40
1.5.4 中斷的標志 42
1.5.5 中斷的返回值 44
1.5.6 關于中斷的一些注意事項 45
1.5.7 上半部和下半部的概念 46
1.5.8 線程中斷處理程序 48
1.5.9 請求一個上下文中斷 53
1.5.10 使用工作隊列延遲下半部 55
1.5.11 從中斷處理程序中鎖定 58
1.6 小結 61
第2章 regmap API應用 63
2.1 技術要求 63
2.2 regmap及其數據結構 64
2.2.1 struct regmap_config結構體中的字段 65
2.2.2 訪問設備寄存器 69
2.2.3 一次讀/寫多個寄存器 71
2.2.4 更新寄存器中的位 72
2.3 regmap和IRQ管理 73
2.3.1 Linux內核IRQ管理的結構 73
2.3.2 創建映射 74
2.3.3 struct irq_domain_ops 76
2.3.4 irq_domain_ops.map() 77
2.3.5 irq_domain_ops.xlate() 77
2.4 鏈接IRQ 78
2.4.1 鏈式中斷 78
2.4.2 嵌套中斷 83
2.4.3 irqchip和gpiolib API—新一代 85
2.4.4 基于gpiochip的鏈式IRQ芯片 87
2.4.5 基于gpiochip的嵌套IRQ芯片 89
2.5 regmap IRQ API和數據結構 91
2.5.1 regmap IRQ數據結構 91
2.5.2 regmap IRQ API 95
2.5.3 regmap IRQ API示例 98
2.6 小結 102
第3章 深入研究MFD子系統和syscon API 103
3.1 技術要求 103
3.2 MFD子系統和syscon API 104
3.2.1 da9055設備驅動程序示例 104
3.2.2 max8925設備驅動程序示例 113
3.3 MFD設備的設備樹綁定 116
3.4 了解syscon和simple-mfd 119
3.4.1 syscon API 119
3.4.2 simple-mfd 123
3.5 小結 125
第4章 通用時鐘框架 127
4.1 技術要求 128
4.2 CCF數據結構和接口 128
4.2.1 了解struct clk_hw及其依賴項 129
4.2.2 注冊/取消注冊時鐘提供者 131
4.2.3 將時鐘公開給使用者 135
4.2.4 時鐘提供者設備樹節點及其相關機制 136
4.2.5 了解of_parse_phandle_with_args() API 138
4.2.6 了解__of_clk_get_from_provider() API 140
4.2.7 時鐘解碼回調 141
4.3 編寫時鐘提供者驅動程序 145
4.3.1 有關時鐘提供者驅動程序的基礎知識 145
4.3.2 提供時鐘操作 149
4.3.3 clk_hw.init.flags中的時鐘標志 152
4.3.4 固定頻率時鐘案例研究及其操作 154
4.3.5 通用簡化注意事項 156
4.3.6 固定頻率時鐘設備綁定 158
4.3.7 PWM時鐘 159
4.3.8 固定倍頻時鐘驅動程序及其操作 160
4.3.9 固定倍頻時鐘的設備樹綁定 162
4.3.10 門控時鐘及其操作 162
4.3.11 基于I2C/SPI的門控時鐘 164
4.3.12 GPIO門控時鐘 165
4.3.13 多選一時鐘及其操作 165
4.3.14 基于I2C/SPI的多選一時鐘 170
4.3.15 GPIO多選一時鐘 170
4.3.16 分頻器時鐘及其操作 172
4.3.17 復合時鐘及其操作 176
4.3.18 綜合概述 177
4.4 時鐘使用者API 179
4.4.1 獲取和釋放時鐘 180
4.4.2 準備/取消準備時鐘 180
4.4.3 啟用/禁用 181
4.4.4 頻率函數 181
4.4.5 父函數 182
4.4.6 綜合概述 182
4.5 小結 182
第2篇 嵌入式Linux系統中的多媒體和節能
第5章 ALSA SoC框架—利用編解碼器和平臺類驅動程序 185
5.1 技術要求 186
5.2 ASoC簡介 186
5.2.1 ASoC數字音頻接口 187
5.2.2 ASoC子元素 187
5.3 編寫編解碼器類驅動程序 189
5.3.1 編解碼器驅動程序的實例結構 190
5.3.2 編解碼器DAI和PCM配置 192
5.3.3 DAI操作 193
5.3.4 采集和回放硬件配置 196
5.3.5 控件的概念 197
5.3.6 控件命名約定 199
5.3.7 控制元數據 200
5.3.8 定義kcontrol 200
5.3.9 設置一個簡單開關 202
5.3.10 設置帶有音量級別的開關 203
5.3.11 立體聲控件 203
5.3.12 帶音量級別的立體聲控件 203
5.3.13 混音器控件 204
5.3.14 定義有多個輸入的控件 204
5.4 DAPM概念 205
5.4.1 關于widget 205
5.4.2 定義widget 207
5.4.3 編解碼域定義 207
5.4.4 定義平臺域widget 208
5.4.5 定義音頻路徑域widget 209
5.4.6 定義音頻流域 211
5.4.7 路徑的概念—widget之間的連接器 213
5.4.8 路由的概念—widget互連 214
5.4.9 定義DAPM kcontrol 215
5.4.10 創建widget和路由 217
5.5 編解碼器組件注冊 222
5.6 編寫平臺類驅動程序 224
5.6.1 CPU DAI驅動程序 225
5.6.2 平臺DMA驅動程序 226
5.6.3 音頻DMA接口 227
5.6.4 PCM硬件配置 230
5.7 小結 233
第6章 ALSA SoC框架—深入了解機器類驅動程序 235
6.1 技術要求 235
6.2 機器類驅動程序介紹 236
6.2.1 機器類驅動程序的開發流程 236
6.2.2 DAI鏈接 237
6.2.3 獲取CPU和編解碼器節點 239
6.3 機器路由 241
6.3.1 編解碼器引腳 241
6.3.2 板卡接口 242
6.3.3 機器路由 243
6.3.4 設備樹路由 243
6.3.5 靜態路由 244
6.4 時鐘和格式注意事項 245
6.4.1 時鐘和格式設置輔助函數 245
6.4.2 格式 246
6.4.3 時鐘源 247
6.4.4 時鐘分頻器 247
6.4.5 時鐘和格式設置的典型實現 247
6.5 聲卡注冊 249
6.6 利用simple-card機器驅動程序 252
6.6.1 simple-audio機器驅動程序 252
6.6.2 無編解碼器聲卡 253
6.7 小結 254
第7章 V4L2和視頻采集設備驅動程序揭秘 255
7.1 技術要求 255
7.2 框架架構和主要數據結構 255
7.2.1 V4L2架構簡介 256
7.2.2 初始化和注冊V4L2設備 257
7.3 橋接視頻設備驅動程序 258
7.3.1 struct video_device結構體 259
7.3.2 初始化和注冊視頻設備 262
7.3.3 視頻設備文件操作 264
7.3.4 V4L2 ioctl處理 267
7.3.5 videobuf2接口和API 269
7.3.6 緩沖區的概念 269
7.3.7 平面的概念 271
7.3.8 隊列的概念 272
7.3.9 與特定驅動程序相關的流傳輸回調函數 274
7.3.10 初始化和釋放vb2隊列 277
7.4 關于子設備 278
7.4.1 子設備數據結構體 279
7.4.2 子設備初始化 282
7.4.3 子設備操作 284
7.4.4 核心操作結構 285
7.4.5 視頻操作結構 286
7.4.6 傳感器操作結構 287
7.4.7 調用子設備操作 288
7.4.8 子設備的注冊和注銷方式 289
7.5 V4L2控件基礎結構 290
7.5.1 標準控件對象 290
7.5.2 控件處理程序 292
7.5.3 攝像頭傳感器驅動程序示例 294
7.5.4 關于控件繼承 297
7.6 小結 297
第8章 集成V4L2異步和媒體控制器框架 299
8.1 技術要求 299
8.2 V4L2異步接口和圖綁定的概念 299
8.2.1 圖綁定 300
8.2.2 端口和端點表示 300
8.2.3 端點鏈接 301
8.2.4 V4L2異步和面向圖的API 302
8.2.5 從設備樹API到通用fwnode圖API 302
8.2.6 V4L2固件節點API 309
8.2.7 V4L2 fwnode或媒體總線類型 311
8.2.8 BT656和并行總線 312
8.2.9 MIPI CSI-2總線 313
8.2.10 CPP2和MIPI CSI-1總線 314
8.2.11 總線猜測 315
8.2.12 V4L2異步模式 315
8.2.13 異步模式工作原理 318
8.2.14 異步橋接和子設備探測示例 321
8.3 Linux媒體控制器框架 325
8.3.1 媒體控制器抽象模型 325
8.3.2 V4L2設備抽象 327
8.3.3 媒體控制器數據結構 328
8.3.4 在驅動程序中集成媒體控制器支持 333
8.3.5 初始化并注冊接口和實體 334
8.3.6 媒體實體操作 335
8.3.7 媒體總線的概念 335
8.3.8 注冊媒體設備 340
8.3.9 來自用戶空間的媒體控制器 341
8.3.10 使用media-ctl 341
8.3.11 帶有OV2680的WaRP7示例 344
8.4 小結 351
展開全部
Linux設備驅動開發 作者簡介
約翰·馬德奧現居住在法國巴黎,他是一位嵌入式Linux和內核工程師。他的主要工作包括為物聯網、自動化、運輸、醫療保健、能源和軍事等領域的公司開發設備驅動程序和板級支持包(Board Support Package,BSP)。John是LABCSMART公司的創始人兼首席顧問,該公司可為嵌入式Linux和Linux內核工程提供培訓和服務。他是一位開源和嵌入式系統愛好者,始終堅信只有分享知識,我們才能學到更多。