Linux設備驅動開發詳解(2015年機械工業出版社出版的圖書)

Linux設備驅動開發詳解(2015年機械工業出版社出版的圖書)

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

《Linux設備驅動開發詳解》是2015年機械工業出版社出版的圖書。

基本介紹

  • 中文名:Linux設備驅動開發詳解
  • 作者:宋寶華
  • 出版時間:2015年 
  • 出版社:機械工業出版社
  • ISBN:9787111507895
內容簡介,圖書目錄,

內容簡介

  本書介紹了Linux設備驅動開發理論、框架與實例,詳細說明了自旋鎖、信號量、完成量、中斷頂/底半部、定時器、記憶體和I/O映射以及異步通知、阻塞I/O、非阻塞I/O等Linux設備驅動理論,以及字元設備、塊設備、tty設備、I2c設備、LCD設備、音頻設備、USB設備、網路設備、PCI設備等Linux設備驅動架構中各個複雜數據結構和函式的關係,並講解了Linux驅動開發的大量實例,使讀者能夠獨立開發各類Linux設備驅動。

圖書目錄

讚譽
推薦序一
推薦序二
前言
第1章 Linux設備驅動概述及開發環境構建 1
1.1 設備驅動的作用 1
1.2 無作業系統時的設備驅動 2
1.3 有作業系統時的設備驅動 4
1.4 Linux設備驅動 5
1.4.1 設備的分類及特點 5
1.4.2 Linux設備驅動與整個軟硬體系統的關係 6
1.4.3 Linux設備驅動的重點、難點 7
1.5 Linux設備驅動的開發環境構建 8
1.5.1 PC上的Linux環境 8
1.5.2 QEMU實驗平台 11
1.5.3 原始碼閱讀和編輯 13
1.6 設備驅動Hello World:LED驅動 15
1.6.1 無作業系統時的LED驅動 15
1.6.2 Linux下的LED驅動 15
第2章 驅動設計的硬體基礎 20
2.1 處理器 20
2.1.1 通用處理器 20
2.1.2 數位訊號處理器 22
2.2 存儲器 24
2.3 接口與匯流排 28
2.3.1 串口 28
2.3.2 I2C 29
2.3.3 SPI 30
2.3.4 USB 31
2.3.5 乙太網接口 33
2.3.6 PCI和PCI-E 34
2.3.7 SD和SDIO 36
2.4 CPLD和FPGA 37
2.5 原理圖分析 40
2.6 硬體時序分析 42
2.6.1 時序分析的概念 42
2.6.2 典型的硬體時序 43
2.7 晶片數據手冊閱讀方法 44
2.8 儀器儀表使用 47
2.8.1 萬用表 47
2.8.2 示波器 47
2.8.3 邏輯分析儀 49
2.9 總結 51
第3章 Linux核心及核心編程 52
3.1 Linux核心的發展與演變 52
3.2 Linux 2.6後的核心特點 56
3.3 Linux核心的組成 59
3.3.1 Linux核心原始碼的目錄結構 59
3.3.2 Linux核心的組成部分 60
3.3.3 Linux核心空間與用戶空間 64
3.4 Linux核心的編譯及載入 64
3.4.1 Linux核心的編譯 64
3.4.2 Kconfig和Makefile 66
3.4.3 Linux核心的引導 74
3.5 Linux下的C編程特點 75
3.5.1 Linux編碼風格 75
3.5.2 GNU C與ANSI C 78
3.5.3 do { } while(0) 語句 83
3.5.4 goto語句 85
3.6 工具鏈 85
3.7 實驗室建設 88
3.8 串口工具 89
3.9 總結 91
第4章 Linux核心模組 92
4.1 Linux核心模組簡介 92
4.2 Linux核心模組程式結構 95
4.3 模組載入函式 95
4.4 模組卸載函式 97
4.5 模組參數 97
4.6 導出符號 99
4.7 模組聲明與描述 100
4.8 模組的使用計數 100
4.9 模組的編譯 101
4.10 使用模組“繞開”GPL 102
4.11 總結 103
第5章 Linux檔案系統與設備檔案 104
5.1 Linux檔案操作 104
5.1.1 檔案作業系統調用 104
5.1.2 C庫檔案操作 108
5.2 Linux檔案系統 109
5.2.1 Linux檔案系統目錄結構 109
5.2.2 Linux檔案系統與設備驅動 110
5.3 devfs 114
5.4 udev用戶空間設備管理 116
5.4.1 udev與devfs的區別 116
5.4.2 sysfs檔案系統與Linux設備模型 119
5.4.3 udev的組成 128
5.4.4 udev規則檔案 129
5.5 總結 133
第6章 字元設備驅動 134
6.1 Linux字元設備驅動結構 134
6.1.1 cdev結構體 134
6.1.2 分配和釋放設備號 136
6.1.3 f?ile_operations結構體 136
6.1.4 Linux字元設備驅動的組成 138
6.2 globalmem虛擬設備實例描述 142
6.3 globalmem設備驅動 142
6.3.1 頭檔案、宏及設備結構體 142
6.3.2 載入與卸載設備驅動 143
6.3.3 讀寫函式 144
6.3.4 seek函式 146
6.3.5 ioctl函式 146
6.3.6 使用檔案私有數據 148
6.4 globalmem驅動在用戶空間中的驗證 156
6.5 總結 157
第7章 Linux設備驅動中的並發控制 158
7.1 並發與競態 158
7.2 編譯亂序和執行亂序 160
7.3 中斷禁止 165
7.4 原子操作 166
7.4.1 整型原子操作 167
7.4.2 位原子操作 168
7.5 自旋鎖 169
7.5.1 自旋鎖的使用 169
7.5.2 讀寫自旋鎖 173
7.5.3 順序鎖 174
7.5.4 讀-複製-更新 176
7.6 信號量 181
7.7 互斥體 183
7.8 完成量 184
7.9 增加並發控制後的globalmem的設備驅動 185
7.10 總結 188
第8章 Linux設備驅動中的阻塞與非阻塞I/O 189
8.1 阻塞與非阻塞I/O 189
8.1.1 等待佇列 191
8.1.2 支持阻塞操作的globalf?ifo設備驅動 194
8.1.3 在用戶空間驗證globalf?ifo的讀寫 198
8.2 輪詢操作 198
8.2.1 輪詢的概念與作用 198
8.2.2 應用程式中的輪詢編程 199
8.2.3 設備驅動中的輪詢編程 201
8.3 支持輪詢操作的globalf?ifo驅動 202
8.3.1 在globalf?ifo驅動中增加輪詢操作 202
8.3.2 在用戶空間中驗證globalf?ifo設備的輪詢 203
8.4 總結 205
第9章 Linux設備驅動中的異步通知與異步I/O 206
9.1 異步通知的概念與作用 206
9.2 Linux異步通知編程 207
9.2.1 Linux信號 207
9.2.2 信號的接收 208
9.2.3 信號的釋放 210
9.3 支持異步通知的globalf?ifo驅動 212
9.3.1 在globalf?ifo驅動中增加異步通知 212
9.3.2 在用戶空間中驗證globalf?ifo的異步通知 214
9.4 Linux異步I/O 215
9.4.1 AIO概念與GNU C庫AIO 215
9.4.2 Linux核心AIO與libaio 219
9.4.3 AIO與設備驅動 222
9.5 總結 223
第10章 中斷與時鐘 224
10.1 中斷與定時器 224
10.2 Linux中斷處理程式架構 227
10.3 Linux中斷編程 228
10.3.1 申請和釋放中斷 228
10.3.2 使能和禁止中斷 230
10.3.3 底半部機制 230
10.3.4 實例:GPIO按鍵的中斷 235
10.4 中斷共享 237
10.5 核心定時器 238
10.5.1 核心定時器編程 238
10.5.2 核心中延遲的工作delayed_work 242
10.5.3 實例:秒字元設備 243
10.6 核心延時 247
10.6.1 短延遲 247
10.6.2 長延遲 248
10.6.3 睡著延遲 248
10.7 總結 250
第11章 記憶體與I/O訪問 251
11.1 CPU與記憶體、I/O 251
11.1.1 記憶體空間與I/O空間 251
11.1.2 記憶體管理單元 252
11.2 Linux記憶體管理 256
11.3 記憶體存取 261
11.3.1 用戶空間記憶體動態申請 261
11.3.2 核心空間記憶體動態申請 262
11.4 設備I/O連線埠和I/O記憶體的訪問 267
11.4.1 Linux I/O連線埠和I/O記憶體訪問接口 267
11.4.2 申請與釋放設備的I/O連線埠和I/O記憶體 268
11.4.3 設備I/O連線埠和I/O記憶體訪問流程 269
11.4.4 將設備地址映射到用戶空間 270
11.5 I/O記憶體靜態映射 276
11.6 DMA 277
11.6.1 DMA與Cache一致性 278
11.6.2 Linux下的DMA編程 279
11.7 總結 285
第12章 Linux設備驅動的軟體架構思想 286
12.1 Linux驅動的軟體架構 286
12.2 platform設備驅動 290
12.2.1 platform匯流排、設備與驅動 290
12.2.2 將globalf?ifo作為platform設備 293
12.2.3 platform設備資源和數據 295
12.3 設備驅動的分層思想 299
12.3.1 設備驅動核心層和例化 299
12.3.2 輸入設備驅動 301
12.3.3 RTC設備驅動 306
12.3.4 Framebuffer設備驅動 309
12.3.5 終端設備驅動 311
12.3.6 misc設備驅動 316
12.3.7 驅動核心層 321
12.4 主機驅動與外設驅動分離的設計思想 321
12.4.1 主機驅動與外設驅動分離 321
12.4.2 Linux SPI主機和設備驅動 322
12.5 總結 330
第13章 Linux塊設備驅動 331
13.1 塊設備的I/O操作特點 331
13.2 Linux塊設備驅動結構 332
13.2.1 block_device_operations結構體 332
13.2.2 gendisk結構體 334
13.2.3 bio、request和request_queue 335
13.2.4 I/O調度器 339
13.3 Linux塊設備驅動的初始化 340
13.4 塊設備的打開與釋放 342
13.5 塊設備驅動的ioctl函式 342
13.6 塊設備驅動的I/O請求處理 343
13.6.1 使用請求佇列 343
13.6.2 不使用請求佇列 347
13.7 實例:vmem_disk驅動 349
13.7.1 vmem_disk的硬體原理 349
13.7.2 vmem_disk驅動模組的載入與卸載 349
13.7.3 vmem_disk設備驅動的block_device_operations 351
13.7.4 vmem_disk的I/O請求處理 352
13.8 Linux MMC子系統 354
13.9 總結 357
第14章 Linux網路設備驅動 358
14.1 Linux網路設備驅動的結構 358
14.1.1 網路協定接口層 359
14.1.2 網路設備接口層 363
14.1.3 設備驅動功能層 367
14.2 網路設備驅動的註冊與註銷 367
14.3 網路設備的初始化 369
14.4 網路設備的打開與釋放 370
14.5 數據傳送流程 371
14.6 數據接收流程 372
14.7 網路連線狀態 375
14.8 參數設定和統計數據 377
14.9 DM9000網卡設備驅動實例 380
14.9.1 DM9000網卡硬體描述 380
14.9.2 DM9000網卡驅動設計分析 380
14.10 總結 386
第15章 Linux I2C核心、匯流排與設備驅動 387
15.1 Linux I2C體系結構 387
15.2 Linux I2C核心 394
15.3 Linux I2C適配器驅動 396
15.3.1 I2C適配器驅動的註冊與註銷 396
15.3.2 I2C匯流排的通信方法 397
15.4 Linux I2C設備驅動 399
15.4.1 Linux I2C設備驅動的模組載入與卸載 400
15.4.2 Linux I2C設備驅動的數據傳輸 400
15.4.3 Linux的i2c-dev.c檔案分析 400
15.5 Tegra I2C匯流排驅動實例 405
15.6 AT24xx EEPROM的I2C設備驅動實例 410
15.7 總結 413
第16章 USB主機、設備與Gadget驅動 414
16.1 Linux USB驅動層次 414
16.1.1 主機側與設備側USB驅動 414
16.1.2 設備、配置、接口、端點 415
16.2 USB主機控制器驅動 420
16.2.1 USB主機控制器驅動的整體結構 420
16.2.2 實例:Chipidea USB主機驅動 425
16.3 USB設備驅動 425
16.3.1 USB設備驅動的整體結構 425
16.3.2 USB請求塊 430
16.3.3 探測和斷開函式 435
16.3.4 USB骨架程式 436
16.3.5 實例:USB鍵盤驅動 443
16.4 USB UDC與Gadget驅動 446
16.4.1 UDC和Gadget驅動的關鍵數據結構與API 446
16.4.2 實例:Chipidea USB UDC驅動 451
16.4.3 實例:Loopback Function驅動 453
16.5 USB OTG驅動 456
16.6 總結 458
第17章 I2C、SPI、USB驅動架構類比 459
17.1 I2C、SPI、USB驅動架構 459
17.2 I2C主機和外設眼裡的Linux世界 460
第18章 ARM Linux設備樹 461
18.1 ARM設備樹起源 461
18.2 設備樹的組成和結構 462
18.2.1 DTS、DTC和DTB等 462
18.2.2 根節點兼容性 468
18.2.3 設備節點兼容性 470
18.2.4 設備節點及label的命名 475
18.2.5 地址編碼 477
18.2.6 中斷連線 479
18.2.7 GPIO、時鐘、pinmux連線 480
18.3 由設備樹引發的BSP和驅動變更 484
18.4 常用的OF API 490
18.5 總結 493
第19章 Linux電源管理的系統架構和驅動 494
19.1 Linux電源管理的全局架構 494
19.2 CPUFreq驅動 495
19.2.1 SoC的CPUFreq驅動實現 495
19.2.2 CPUFreq的策略 501
19.2.3 CPUFreq的性能測試和調優 501
19.2.4 CPUFreq通知 502
19.3 CPUIdle驅動 504
19.4 PowerTop 508
19.5 Regulator驅動 508
19.6 OPP 511
19.7 PM QoS 515
19.8 CPU熱插拔 518
19.9 掛起到RAM 522
19.10 運行時的PM 528
19.11 總結 534
第20章 Linux晶片級移植及底層驅動 535
20.1 ARM Linux底層驅動的組成和現狀 535
20.2 核心節拍驅動 536
20.3 中斷控制器驅動 541
20.4 SMP多核啟動以及CPU熱插拔驅動 549
20.5 DEBUG_LL和EARLY_PRINTK的設定 556
20.6 GPIO驅動 557
20.7 pinctrl驅動 560
20.8 時鐘驅動 572
20.9 dmaengine驅動 578
20.10 總結 580
第21章 Linux設備驅動的調試 581
21.1 GDB調試器的用法 581
21.1.1 GDB的基本用法 581
21.1.2 DDD圖形界面調試工具 591
21.2 Linux核心調試 594
21.3 核心列印信息——printk( ) 596
21.4 DEBUG_LL和EARLY_PRINTK 599
21.5 使用“/proc” 600
21.6 Oops 606
21.7 BUG_ON( )和WARN_ON( ) 608
21.8 strace 609
21.9 KGDB 610
21.10 使用仿真器調試核心 612
21.11 應用程式調試 613
21.12 Linux性能監控與調優工具 616
21.13 總結 618

相關詞條

熱門詞條

聯絡我們