內容介紹
本書是一本介紹Linux設備驅動開發理論、框架與實例的書,本書基於LDD6410開發闆,以Linux 2.6版本內核為藍本,詳細介紹自鏇鎖、信號量、完成量、中斷頂/底半部、定時器、內存和I/O映射以及異步通知、阻塞I/O、非阻塞I/O等Linux設備驅動理論;字符設備、塊設備、TTY設備、I2C設備、LCD設備、音頻設備、USB設備、網絡設備、PCI設備等Linux設備驅動的架構和框架中各個復雜數據架構和函數的關係,並講解瞭Linux驅動開發的大量實例,使讀者能夠獨立開發各類Linux設備驅動。 本書內容全麵,實例豐富,操作性強,語言通俗易懂,適閤廣大Linux開發人員、嵌入式工程師參考使用。
關聯推薦
設備驅動程序是嵌入式操作係統的重要模塊,也是難點之一,Linux設備驅動程序*以復雜和繁多而著名,本書的作者集多年授課和開發的經驗,以簡潔的語言和豐富的實例講述瞭這一技術,深入淺齣,值得一讀。 本書係統講述瞭Linux內核驅動的支撐技術,涉及內核編程方式、內核模塊、設備文件係統、同步互斥機製等。本書針對具體硬件的真實外設,結閤實際外設的硬件邏輯,講解瞭常見類型驅動程序的編寫方法和實現細節。 如果說硬件是係統的軀體,軟件是係統的靈魂,驅動就是連接軀體和靈魂的紐帶,是係統運轉的樞紐。本書旨在引導讀者,消除讀者對驅動開發的神秘感,同時也指齣瞭老手常見的盲點與誤區。*難得的是,本書通過大量開發實例生動、係統地講解瞭Linux設備驅動開發的方方麵麵。
目錄
目 錄
第1篇 Linux設備驅動入門
第1章 Linux設備驅動概述及開發環境構建 2
1.1 設備驅動的作用 3
1.2 無操作係統時的設備驅動 3
1.3 有操作係統時的設備驅動 5
1.4 Linux設備驅動 6
1.4.1 設備的分類及特點 6
1.4.2 Linux設備驅動與整個軟硬件係統的關係 7
1.4.3 Linux設備驅動的重點、難點 8
1.5 Linux設備驅動開發環境構建 8
1.5.1 PC上的Linux環境 8
1.5.2 LDD6410開發闆 11
1.5.3 工具鏈安裝 13
1.5.4 主機端nfs和tftp服務安裝 14
1.5.5 源代碼閱讀和編輯 14
1.6 設備驅動Hello World:LED驅動 15
1.6.1 無操作係統時的LED驅動 15
1.6.2 Linux下的LED驅動 16
1.7 全書結構 19
第2章 驅動設計的硬件基礎 21
2.1 處理器 22
2.1.1 通用處理器 22
2.1.2 數字信號處理器 23
2.2 存儲器 25
2.3 接口與總綫 29
2.3.1 串口 29
2.3.2 I2C 30
2.3.3 USB 31
2.3.4 以太網接口 33
2.3.5 ISA 34
2.3.6 PCI和cPCI 35
2.4 CPLD和FPGA 38
2.5 原理圖分析 41
2.5.1 原理圖分析的內容 41
2.5.2 原理圖的分析方法 41
2.6 硬件時序分析 43
2.6.1 時序分析的概念 43
2.6.2 典型硬件時序 44
2.7 芯片手冊閱讀方法 45
2.8 儀器儀錶使用 48
2.8.1 萬用錶 48
2.8.2 示波器 48
2.8.3 邏輯分析儀 50
2.9 總結 52
第3章 Linux內核及內核編程 53
3.1 Linux內核的發展與演變 54
3.2 Linux 2.6內核的特點 55
3.3 Linux內核的組成 56
3.3.1 Linux內核源代碼目錄結構 56
3.3.2 Linux內核的組成部分 57
3.3.3 Linux內核空間與用戶空間 60
3.4 Linux內核的編譯及加載 60
3.4.1 Linux內核的編譯 60
3.4.2 Kconfig和Makefile 62
3.4.3 Linux內核的引導 69
3.5 Linux下的C編程特點 71
3.5.1 Linux編碼風格 71
3.5.2 GNU C與ANSI C 73
3.5.3 do{ }while(0) 77
3.5.4 goto 78
3.6 總結 79
第2篇 Linux設備驅動核心理論
第4章 Linux內核模塊 82
4.1 Linux內核模塊簡介 83
4.2 Linux內核模塊程序結構 85
4.3 模塊加載函數 85
4.4 模塊卸載函數 86
4.5 模塊參數 87
4.6 導齣符號 88
4.7 模塊聲明與描述 89
4.8 模塊的使用計數 89
4.9 模塊的編譯 90
4.10 使用模塊繞開GPL 91
4.11 總結 91
第5章 Linux文件係統與設備文件係統 92
5.1 Linux文件操作 93
5.1.1 文件操作係統調用 93
5.1.2 C庫文件操作 95
5.2 Linux文件係統 97
5.2.1 Linux文件係統目錄結構 97
5.2.2 Linux文件係統與設備驅動 98
5.3 devfs設備文件係統 101
5.4 udev設備文件係統 102
5.4.1 udev與devfs的區彆 102
5.4.2 sysfs文件係統與Linux設備模型 104
5.4.3 udev的組成 110
5.4.4 udev規則文件 111
5.4.5 創建和配置mdev 113
5.5 LDD6410的SD和NAND文件係統 114
5.6 總結 117
第6章 字符設備驅動 118
6.1 Linux字符設備驅動結構 119
6.1.1 cdev結構體 119
6.1.2 分配和釋放設備號 120
6.1.3 file_operations結構體 120
6.1.4 Linux字符設備驅動的組成 122
6.2 globalmem虛擬設備實例描述 124
6.3 globalmem設備驅動 125
6.3.1 頭文件、宏及設備結構體 125
6.3.2 加載與卸載設備驅動 126
6.3.3 讀寫函數 127
6.3.4 seek函數 128
6.3.5 ioctl函數 129
6.3.6 使用文件私有數據 130
6.4 globalmem驅動在用戶空間的驗證 136
6.5 總結 138
第7章 Linux設備驅動中的並發控製 139
7.1 並發與競態 140
7.2 中斷屏蔽 141
7.3 原子操作 142
7.3.1 整型原子操作 142
7.3.2 位原子操作 142
7.4 自鏇鎖 143
7.4.1 自鏇鎖的使用 143
7.4.2 讀寫自鏇鎖 145
7.4.3 順序鎖 147
7.4.4 讀-拷貝-更新 148
7.5 信號量 152
7.5.1 信號量的使用 152
7.5.2 信號量用於同步 154
7.5.3 完成量用於同步 154
7.5.4 自鏇鎖vs信號量 155
7.5.5 讀寫信號量 155
7.6 互斥體 156
7.7 增加並發控製後的globalmem驅動 157
7.8 總結 160
第8章 Linux設備驅動中的阻塞與非阻塞I/O 161
8.1 阻塞與非阻塞I/O 162
8.1.1 等待隊列 162
8.1.2 支持阻塞操作的globalfifo設備驅動 166
8.1.3 在用戶空間驗證globalfifo的讀寫 171
8.2 輪詢操作 172
8.2.1 輪詢的概念與作用 172
8.2.2 應用程序中的輪詢編程 172
8.2.3 設備驅動中的輪詢編程 172
8.3 支持輪詢操作的globalfifo驅動 173
8.3.1 在globalfifo驅動中增加輪詢操作 173
8.3.2 在用戶空間驗證globalfifo設備的輪詢 174
8.4 總結 175
第9章 Linux設備驅動中的異步通知與異步I/O 176
9.1 異步通知的概念與作用 177
9.2 Linux異步通知編程 177
9.2.1 Linux信號 177
9.2.2 信號的接收 179
9.2.3 信號的釋放 180
9.3 支持異步通知的globalfifo驅動 182
9.3.1 在globalfifo驅動中增加異步通知 182
9.3.2 在用戶空間驗證globalfifo的異步通知 184
9.4 Linux 2.6異步I/O 185
9.4.1 AIO概念與GNU C庫函數 185
9.4.2 使用信號作為AIO的通知 188
9.4.3 使用迴調函數作為AIO的通知 189
9.4.4 AIO與設備驅動 190
9.5 總結 192
第10章 中斷與時鍾 193
10.1 中斷與定時器 194
10.2 Linux中斷處理程序架構 195
10.3 Linux中斷編程 196
10.3.1 申請和釋放中斷 196
10.3.2 使能和屏蔽中斷 197
10.3.3 底半部機製 197
10.3.4 實例:S3C6410實時鍾中斷 200
10.4 中斷共享 202
10.5 內核定時器 203
10.5.1 內核定時器編程 203
10.5.2 內核中延遲的工作delayed_work 205
10.5.3 實例:秒字符設備 206
10.6 內核延時 210
10.6.1 短延遲 210
10.6.2 長延遲 210
10.6.3 睡著延遲 211
10.7 總結 212
第11章 內存與I/O訪問 213
11.1 CPU與內存和I/O 214
11.1.1 內存空間與I/O空間 214
11.1.2 內存管理單元MMU 215
11.2 Linux內存管理 218
11.3 內存存取 220
11.3.1 用戶空間內存動態申請 220
11.3.2 內核空間內存動態申請 221
11.3.3 虛擬地址與物理地址關係 224
11.4 設備I/O端口和I/O內存的訪問 225
11.4.1 Linux I/O端口和I/O內存訪問接口 225
11.4.2 申請與釋放設備I/O端口和I/O內存 226
11.4.3 設備I/O端口和I/O內存訪問流程 227
11.4.4 將設備地址映射到用戶空間 228
11.5 I/O內存靜態映射 233
11.6 DMA 236
11.6.1 DMA與Cache一緻性 236
11.6.2 Linux下的DMA編程 237
11.7 總結 241
第12章 工程中的Linux設備驅動 242
12.1 platform設備驅動 243
12.1.1 platform總綫、設備與驅動 243
12.1.2 將globalfifo作為platform設備 244
12.1.3 platform設備資源和數據 246
12.2 設備驅動的分層思想 248
12.2.1 設備驅動核心層和例化 248
12.2.2 輸入設備驅動 249
12.2.3 RTC設備驅動 254
12.3 主機驅動與外設驅動分離思想 255
12.3.1 主機、外設驅動分離的意義 255
12.3.2 Linux SPI主機和設備驅動 256
12.4 設備驅動中的電源管理 260
12.5 misc設備驅動 262
12.6 基於sysfs的設備驅動 263
12.7 Linux設備驅動的固件加載 265
12.8 Android設備驅動 266
12.9 總結 269
第3篇 Linux設備驅動實例
第13章 Linux塊設備驅動 272
13.1 塊設備的I/O操作特點 273
13.2 Linux塊設備驅動結構 273
13.2.1 block_device_operations結構體 273
13.2.2 gendisk結構體 274
13.2.3 request與bio結構體 276
13.2.4 塊設備驅動注冊與注銷 285
13.3 Linux塊設備驅動的模塊加載與卸載 286
13.4 塊設備的打開與釋放 288
13.5 塊設備驅動的ioctl函數 288
13.6 塊設備驅動的I/O請求處理 289
13.6.1 使用請求隊列 289
13.6.2 不使用請求隊列 291
13.7 實例1:vmem_disk驅動 292
13.7.1 vmem_disk的硬件原理 292
13.7.2 vmem_disk驅動模塊的加載與卸載 293
13.7.3 vmem_disk設備驅動block_device_operations及成員函數 296
13.7.4 vmem_disk I/O請求處理 298
13.8 實例2:IDE硬盤設備驅動 300
13.9 總結 303
第14章 Linux終端設備驅動 304
14.1 終端設備 305
14.2 終端設備驅動結構 307
14.3 終端設備驅動初始化與釋放 311
14.3.1 模塊加載與卸載函數 311
14.3.2 打開與關閉函數 312
14.4 數據發送和接收 313
14.5 TTY綫路設置 316
14.5.1 綫路設置用戶空間接口 316
14.5.2 tty驅動set_termios函數 317
14.5.3 tty驅動的tiocmget和tiocmset函數 318
14.5.4 tty驅動ioctl函數 319
14.6 UART設備驅動 320
14.7 printk和early_printk console驅動 325
14.8 實例:S3C6410串口與console驅動 328
14.8.1 S3C6410串口硬件描述 328
14.8.2 S3C6410串口UART驅動 330
14.8.3 S3C6410串口console驅動 331
14.9 總結 332
第15章 Linux的I2C核心、總綫與設備驅動 333
15.1 Linux的I2C體係結構 334
15.2 Linux I2C核心 339
15.3 Linux I2C總綫驅動 341
15.3.1 I2C適配器驅動加載與卸載 341
15.3.2 I2C總綫通信方法 342
15.4 Linux I2C設備驅動 344
15.4.1 Linux I2C設備驅動的模塊加載與卸載 344
15.4.2 Linux I2C設備驅動的數據傳輸 344
15.4.3 Linux的i2c-dev.c文件分析 345
15.5 S3C6410 I2C總綫驅動實例 349
15.5.1 S3C6410 I2C控製器硬件描述 349
15.5.2 S3C6410 I2C總綫驅動總體分析 349
15.5.3 S3C6410 I2C適配器驅動的模塊加載與卸載 350
15.5.4 S3C6410 I2C總綫通信方法 354
15.6 AT24XX EEPROM的I2C設備驅動實例 359
15.7 總結 362
第16章 Linux網絡設備驅動 363
16.1 Linux網絡設備驅動的結構 364
16.1.1 網絡協議接口層 364
16.1.2 網絡設備接口層 366
16.1.3 設備驅動功能層 369
16.1.4 網絡設備與媒介層 369
16.2 網絡設備驅動的注冊與注銷 369
16.3 網絡設備的初始化 371
16.4 網絡設備的打開與釋放 372
16.5 數據發送流程 373
16.6 數據接收流程 374
16.7 網絡連接狀態 377
16.8 參數設置和統計數據 378
16.9 DM9000網卡設備驅動實例 381
16.9.1 DM9000網卡硬件描述 381
16.9.2 DM9000網卡驅動設計分析 383
16.10 總結 387
第17章 Linux音頻設備驅動 388
17.1 數字音頻設備 389
1
Linux設備驅動開發詳解(第2版) 嵌入式linux技術操作詳解 linux操作係統 下載 mobi epub pdf txt 電子書 格式
Linux設備驅動開發詳解(第2版) 嵌入式linux技術操作詳解 linux操作係統 下載 mobi pdf epub txt 電子書 格式 2024
Linux設備驅動開發詳解(第2版) 嵌入式linux技術操作詳解 linux操作係統 mobi epub pdf txt 電子書 格式下載 2024