內容提要
該書詳細講解了嵌入式Linux的各種設備驅動。嵌入式Linux設備驅動是嵌入式系統中十分重要的組成部分。本書詳細講解了嵌入式Linux的各種設備驅動,包括字元設備驅動、數字顯示驅動、鍵盤驅動、A/D驅動、D/A驅動、LCD驅動、觸控螢幕驅動、CAN匯流排驅動、IIC匯流排驅動、音頻匯流排驅動、IDE接口驅動、快閃記憶體晶片驅動、USB驅動、串口驅動、網路設備驅動等,並結合大量實例進行講解,讀者可以快速熟悉和掌握相關知識。
編輯推薦
本書特色:本書系統地介紹了嵌入式Linux設備驅動開發的相關知識和實例,主要包括:
數碼管驅動程式;鍵盤驅動程式;A/D、D/A驅動程式;LCD驅動程式;觸控螢幕驅動程式;CAN匯流排驅動程式;I2C匯流排驅動程式;音頻匯流排驅動程式;IDE驅動程式;NAND Flash和NOR Flash驅動程式;USB設備驅動程式;串口驅動程式;網路設備驅動程式。
實例豐富、講解細緻、代碼分析詳盡,嵌入式Linux設備驅動開發的理想參考用書。
目錄
第1章 嵌入式系統與驅動程式 1
本章目標 1
1.1 嵌入式系統概述 1
1.1.1 嵌入式系統的概念 1
1.1.2 嵌入式系統的特點 2
1.1.3 嵌入式系統的體系結構 2
1.2 嵌入式處理器介紹 4
1.2.1 嵌入式處理器分類 4
1.2.2 ARM概述 5
1.2.3 ARM系列晶片簡介 5
1.3 嵌入式作業系統介紹 7
1.3.1 主流嵌入式作業系統 7
1.3.2 嵌入式系統的發展狀況 8
1.3.3 嵌入式Linux介紹 8
1.3.4 嵌入式系統開發環境的建立 9
1.3.5 嵌入式軟體開發 10
1.4 嵌入式Linux驅動程式 12
1.4.1 嵌入式Linux的核心空間和用戶空間 12
1.4.2 嵌入式Linux的檔案系統 12
1.4.3 嵌入式Linux的設備管理 14
1.4.4 嵌入式Linux的驅動程式 16
1.5 知識索引 20
1.6 思考與練習 21
第2章 簡單的字元設備驅動程式 23
本章目標 23
2.1 嵌入式Linux字元設備的驅動程式結構 23
2.1.1 嵌入式Linux驅動程式常用的頭檔案 24
2.1.2 File_operations結構體 24
2.1.3 字元設備驅動程式的入口 25
2.1.4 驅動程式的設備註冊 26
2.2 設備驅動程式中的具體問題 27
2.2.1 I/O連線埠 28
2.2.2 記憶體操作 29
2.2.3 中斷處理 29
2.3 LED的驅動程式實例及測試 30
2.3.1 LED I/O連線埠設定 30
2.3.2 LED硬體電路設計 32
2.3.3 LED驅動程式設計 33
2.3.4 LED測試程式設計 36
2.4 嵌入式Linux中斷處理驅動程式及測試 37
2.4.1 中斷處理過程 37
2.4.2 中斷向量表 39
2.4.3 中斷的處理模式 39
2.4.4 中斷的優先權 40
2.4.5 中斷的嵌套 40
2.4.6 中斷源的擴展 40
2.4.7 中斷控制暫存器的設定 41
2.5 按鍵中斷的驅動程式實例 45
2.5.1 按鍵中斷的電路設計 45
2.5.2 按鍵中斷的驅動程式設計 45
2.6 知識索引 48
2.7 思考與練習 49
第3章 數字顯示驅動程式 50
本章目標 50
3.1 數字顯示器 50
3.1.1 數碼管簡介 50
3.1.2 數碼管的分類 51
3.1.3 數碼管顯示原理 51
3.2 數碼管顯示電路的硬體設計 52
3.2.1 解碼器的使用 52
3.2.2 數碼管的驅動方式 53
3.2.3 串/並變換的解碼設計 55
3.3 數碼管驅動程式實例 56
3.3.1 驅動程式的初始化和卸載模組 56
3.3.2 檔案操作結構模組 57
3.3.3 數碼管的打開模組 57
3.3.4 數碼管的讀寫模組 58
3.3.5 數碼管的I/O控制模組 58
3.3.6 數碼管的退出模組 58
3.3.7 驅動程式的模組載入和卸載 59
3.4 數碼管顯示電路測試程式設計 60
3.4.1 數碼管測試設計 60
3.4.2 數碼管測試程式 60
3.4.3 數碼管測試效果 61
3.5 知識索引 61
3.6 思考與練習 62
第4章 鍵盤驅動程式 63
本章目標 63
4.1 鍵盤接口概述 63
4.1.1 鍵盤的分類 63
4.1.2 鍵盤的防抖 65
4.1.3 鍵盤的掃描 65
4.1.4 鍵盤的緩衝算法 67
4.2 鍵盤的驅動設計實例 67
4.2.1 鎖存器和緩衝器擴展鍵盤 67
4.2.2 鎖存器和緩衝器的接口 68
4.2.3 鎖存器和緩衝器擴展鍵盤驅動程式設計 69
4.2.4 鎖存器和緩衝器擴展鍵盤測試程式設計 71
4.3 智慧型控制晶片HD7279擴展鍵盤 72
4.3.1 HD7279的電路設計 72
4.3.2 HD7279的指令介紹 73
4.3.3 HD7279的串列接口 74
4.3.4 HD7279的驅動程式設計 75
4.3.5 HD7279的測試程式設計 84
4.4 知識索引 85
4.5 思考與練習 85
第5章 A/D驅動程式 86
本章目標 86
5.1 A/D轉換的過程 86
5.1.1 採樣和保持 86
5.1.2 量化和編碼 88
5.1.3 ADC的分類 89
5.2 A/D轉換器的基本原理 89
5.2.1 逐次逼近型A/D轉換器 89
5.2.2 雙積分型A/D轉換器 90
5.2.3 V/F和F/V型轉換器 93
5.2.4 其他A/D轉換器 95
5.3 A/D轉換器接口技術 97
5.3.1 ADC的主要參數及意義 97
5.3.2 ADC的電路選擇方法 98
5.3.3 ADC實際套用中的問題 99
5.4 S3C2410 A/D轉換驅動設計實例 99
5.4.1 S3C2410的A/D轉換電路 99
5.4.2 S3C2410X的A/D轉換控制暫存器 100
5.4.3 S3C2410X的A/D轉換數據暫存器 101
5.4.4 S3C2410X中A/D轉換驅動程式的設計 102
5.4.5 S3C2410X中A/D轉換測試程式的設計 105
5.5 知識索引 106
5.6 思考與練習 107
第6章 D/A驅動程式 108
本章目標 108
6.1 D/A的原理介紹 108
6.1.1 D/A轉換的概念及基本原理 108
6.1.2 電子模擬開關 109
6.1.3 D/A轉換器的基本結構 110
6.1.4 D/A轉換的靜態參數 114
6.1.5 D/A轉換的動態參數 115
6.2 D/A轉換的硬體電路設計 116
6.2.1 D/A轉換的接口技術 116
6.2.2 D/A轉換晶片介紹 117
6.2.3 D/A轉換的電路設計 118
6.3 D/A轉換器的驅動程式實例 118
6.3.1 D/A驅動程式中的宏定義 118
6.3.2 D/A的模組載入 118
6.3.3 D/A轉換器的檔案操作模組 119
6.3.4 D/A轉換器的讀寫控制模組 120
6.3.5 D/A轉換器的打開、退出模組 120
6.4 測試程式的設計 120
6.4.1 D/A測試程式中的宏定義 121
6.4.2 D/A測試程式的主函式 121
6.4.3 D/A測試程式中的功能函式 122
6.4.4 D/A測試程式中的功能列印函式 123
6.4.5 D/A測試程式中的波形生成函式 123
6.4.6 D/A測試程式的效果 124
6.5 知識索引 125
6.6 思考與練習 125
第7章 LCD驅動程式 126
本章目標 126
7.1 LCD顯示器概述 126
7.1.1 液晶 126
7.1.2 LCD顯示屏的背光 127
7.1.3 LCD顯示器的分類 127
7.1.4 LCD的顯示原理 127
7.1.5 LCD的驅動方式 130
7.1.6 LCD的常用指標 131
7.2 LCD的顯示接口 131
7.2.1 灰度STN的時序 132
7.2.2 彩色STN的時序 133
7.2.3 TFT的時序 134
7.3 嵌入式處理器的LCD控制器 136
7.3.1 LCD控制器 136
7.3.2 LCD控制器的設定 137
7.3.3 LCD的字元顯示快取 139
7.4 LCD的驅動程式設計 140
7.4.1 LCD驅動程式相關的宏定義 140
7.4.2 LCD驅動程式的底層操作函式 142
7.4.3 LCD驅動程式提供的API 145
7.4.4 LCD驅動程式的模組化載入 151
7.4.5 LCD的測試程式 152
7.5 基於Framebuffer的LCD驅動程式實例 155
7.5.1 Framebuffer概述 155
7.5.2 LCD的電路連線 155
7.5.3 Framebuffer設備驅動程式的結構 156
7.5.4 Framebuffer設備驅動程式的設計 159
7.5.5 Framebuffer設備測試程式的設計 164
7.5.6 嵌入式Linux常用的GUI 166
7.6 知識索引 166
7.7 思考與練習 167
第8章 觸控螢幕驅動程式 168
本章目標 168
8.1 觸控螢幕概述 168
8.2 觸控螢幕的分類 168
8.2.1 電阻技術觸控螢幕 168
8.2.2 表面聲波技術觸控螢幕 169
8.2.3 電容電感技術觸控螢幕 170
8.2.4 紅外線技術觸控螢幕 170
8.3 觸控螢幕的特性 171
8.3.1 透明度和色彩失真 171
8.3.2 反光性 171
8.3.3 清晰度 171
8.3.4 漂移 172
8.3.5 檢測和定位 172
8.4 觸控螢幕的硬體電路設計 172
8.4.1 電阻式觸控螢幕的電路原理 172
8.4.2 電阻式觸控螢幕原點的定位 173
8.4.3 電阻式觸控螢幕的電路連線 174
8.5 觸控螢幕的驅動程式實例 176
8.5.1 觸控螢幕接口的模式 176
8.5.2 A/D轉換和觸控螢幕暫存器的設定 177
8.5.3 觸控螢幕的坐標 179
8.5.4 觸控螢幕的電路連線 180
8.5.5 觸控螢幕的驅動程式接口 181
8.6 測試程式的設計 182
8.6.1 觸控螢幕的數據定義 183
8.6.2 觸控螢幕的數據處理 183
8.6.3 觸控螢幕的運行測試 185
8.7 知識索引 186
8.8 思考與練習 187
第9章 CAN匯流排驅動程式 188
本章目標 188
9.1 CAN匯流排接口設計 188
9.1.1 CAN匯流排概述 188
9.1.2 CAN的工作特點及主要優點 189
9.1.3 CAN匯流排的電氣特徵和MAC幀結構 189
9.2 嵌入式處理器上CAN匯流排接口的擴展 190
9.2.1 SJA1000簡介 190
9.2.2 SJA1000擴展 191
9.3 SJA1000擴展CAN匯流排接口的設計 192
9.3.1 CAN 控制器SJA1000的操作模式 192
9.3.2 CAN控制器SJA1000的特徵功能 193
9.3.3 CAN 控制器SJA1000的Basic CAN模式設定 194
9.4 SJA1000擴展CAN匯流排接口的通信 196
9.4.1 通過CAN匯流排建立通信的步驟 196
9.4.2 SJA1000的初始化 196
9.4.3 驅動程式的結構設計 198
9.4.4 驅動程式init、exit、open、close函式的實現 200
9.4.5 驅動程式read、write函式的實現 201
9.4.6 驅動程式interrupt、ioctl函式實現 202
9.4.7 測試程式的編寫 202
9.5 驅動程式的載入 204
9.6 知識索引 204
9.7 思考與練習 205
第10章 IIC匯流排驅動程式 206
本章目標 206
10.1 IIC匯流排概述 206
10.1.1 IIC匯流排介紹 206
10.1.2 IIC匯流排引入的原因 206
10.1.3 IIC匯流排的特點 206
10.1.4 IIC匯流排的基本結構 207
10.1.5 IIC匯流排的術語 207
10.1.6 IIC匯流排的工作 208
10.1.7 IIC匯流排的競爭仲裁 209
10.1.8 IIC匯流排的工作流程 210
10.2 嵌入式處理器的IIC接口 211
10.2.1 IIC匯流排控制暫存器 212
10.2.2 IIC匯流排控制/狀態暫存器 213
10.2.3 IIC匯流排地址暫存器 214
10.2.4 IIC匯流排移位數據暫存器 214
10.2.5 S3C2410中與IIC對應的I/O連線埠 215
10.3 基於IIC的鍵盤晶片套用 216
10.3.1 ZLG7290的功能 217
10.3.2 ZLG7290的控制方式 218
10.3.3 ZLG7290的暫存器 218
10.3.4 ZLG7290的通信接口 219
10.3.5 ZLG7290的指令介紹 219
10.4 IIC匯流排驅動程式實例 221
10.4.1 ZLG7290的電路連線 221
10.4.2 ZLG7290的通信流程 223
10.4.3 ZLG7290驅動中變數的定義 225
10.4.4 ZLG7290驅動中實時時鐘的改變 226
10.4.5 ZLG7290和IIC暫存器的初始化 227
10.4.6 ZLG7290驅動程式的模組化 228
10.4.7 ZLG7290的檔案操作結構 228
10.5 IIC匯流排的測試程式 230
10.6 知識索引 231
10.7 思考與練習 231
第11章 音頻匯流排驅動程式 232
本章目標 232
11.1 音頻匯流排接口概述 232
11.1.1 音頻的採樣精度 233
11.1.2 音頻編碼 233
11.2 IIS音頻匯流排接口 233
11.2.1 IIS匯流排的物理連線 233
11.2.2 IIS的匯流排協定 234
11.2.3 IIS匯流排的硬體設計 235
11.2.4 IIS匯流排的暫存器 236
11.3 AC97音頻匯流排接口 239
11.4 IIS匯流排的驅動程式設計 240
11.4.1 音頻設備基礎知識 240
11.4.2 音頻設備檔案 241
11.4.3 WAV聲音檔案 243
11.4.4 音頻設備和驅動程式的通信 243
11.4.5 設備的初始化和載入 244
11.4.6 DMA的操作和宏定義 246
11.4.7 audio設備檔案的操作 248
11.4.8 mixer設備檔案的操作 260
11.5 音頻驅動程式的測試 262
11.6 知識索引 262
11.7 思考與練習 263
第12章 IDE接口驅動程式 264
本章目標 264
12.1 IDE接口概述 264
12.1.1 硬碟知識介紹 264
12.1.2 IDE接口標準 267
12.1.3 IDE接口的傳輸模式 269
12.1.4 IDE接口暫存器 269
12.2 IDE接口驅動程式的移植 271
12.2.1 嵌入式Linux下IDE驅動程式接口 271
12.2.2 嵌入式Linux下IDE驅動程式 272
12.2.3 IDE硬碟的讀/寫操作 274
12.3 IDE驅動程式測試 282
12.3.1 磁碟檔案系統簡介 283
12.3.2 IDE分區測試 283
12.4 知識索引 285
12.5 思考與練習 285
第13章 快閃記憶體晶片的驅動程式 286
本章目標 286
13.1 快閃記憶體晶片概述 286
13.1.1 快閃記憶體晶片的物理特性 286
13.1.2 嵌入式檔案系統概述 289
13.1.3 MTD體系介紹 289
13.1.4 Flash專有名詞 291
13.2 NAND Flash 291
13.2.1 NAND Flash的結構 291
13.2.2 NAND Flash的操作 292
13.2.3 NAND Flash控制器 294
13.2.4 NAND Flash的時序 296
13.2.5 NAND Flash的驅動程式實例 297
13.3 NOR Flash 301
13.3.1 NOR Flash的結構 301
13.3.2 NOR Flash的操作 302
13.3.3 NOR Flash的驅動程式實例 303
13.4 基於快閃記憶體的檔案系統 307
13.5 知識索引 309
13.6 思考與練習 310
第14章 USB 設備驅動程式 311
本章目標 311
14.1 USB接口概述 311
14.1.1 USB系統 311
14.1.2 USB的電氣特性 312
14.1.3 USB匯流排的拓撲結構 313
14.1.4 USB的通信協定 313
14.2 嵌入式系統中USB的使用 315
14.2.1 OHCI概述 315
14.2.2 Host接口硬體設計 316
14.3 嵌入式系統中USB設備的驅動程式設計 316
14.3.1