內容簡介
《Linux驅動程式開發實例》本書專門介紹Linux設備驅動程式開發,涵蓋了Linux驅動程式基礎、核心移植、I2C驅動程式、LCD驅動程式、網路驅動程式、USB驅動程式、輸入子系統驅動程式、塊設備驅動程式等內容。
設備驅動程式是高級應用程式與硬體設備之間的橋樑。驅動程式開發是軟硬體結合的技術。本書以實例為主線,是為Linux設備驅動程式開發人員量身打造的精品學習圖書和實戰指南。本書提供了豐富的實例代碼和詳細的注釋,並附贈完整代碼光碟一張。
本書主要面向各層次的嵌入式Linux開發工程師,也可以作為各類嵌入式系統培訓機構的培訓教材和高校計算機課程的教輔書籍。
圖書信息
圖書在版編目(CIP)數據Linux驅動程式開發實例 / 馮國進編著.—北京:機械工業出版社,2011.3
(信息科學與技術叢書)
Ⅰ.①L… Ⅱ.①馮… Ⅲ.①Linux作業系統-程式設計 Ⅳ.①TP316.89
中國版本圖書館CIP數據核字(2011)第017661號
機械工業出版社(北京市百萬莊大街22號 郵政編碼100037)
目錄
前言
第1章 Linux設備驅動程式模型 1
1.1 設備驅動程式基礎 1
1.1.1 驅動程式的概念 1
1.1.2 驅動程式的載入方式 2
1.1.3 編寫可載入模組 3
1.1.4 帶參數的可載入模組 5
1.1.5 設備驅動程式的分類 6
1.2 字元設備驅動程式原理 7
1.2.1 file_operations結構 7
1.2.2 使用register_chrdev註冊字元
設備 9
1.2.3 使用cdev_add註冊字元設備 11
1.2.4 字元設備的讀寫 13
1.2.5 ioctl接口 14
1.2.6 seek接口 16
1.2.7 poll接口 18
1.2.8 異步通知 22
1.3 proc檔案系統 24
1.3.1 proc檔案系統概述 24
1.3.2 seq_file機制 25
1.3.3 使用proc檔案系統 27
1.4 塊設備驅動程式 32
1.4.1 Linux塊設備驅動程式原理 32
1.4.2 簡單的塊設備驅動程式實例 35
1.5 網路設備驅動程式 39
1.5.1 網路設備的特殊性 39
1.5.2 sk_buff結構 40
1.5.3 Linux網路設備驅動程式架構 42
1.5.4 虛擬網路設備驅動程式實例 46
1.6 Linux 2.6設備管理機制 50
1.6.1 kobject和kset 50
1.6.2 sysfs檔案系統 51
1.6.3 設備模型層次 52
1.6.4 platform的概念 54
第2章 Linux核心同步機制 58
2.1 鎖機制 58
2.1.1 自旋鎖 58
2.1.2 讀寫鎖 60
2.1.3 RCU 61
2.2 互斥 64
2.2.1 原子操作 64
2.2.2 信號量 65
2.2.3 讀寫信號量 67
2.3 等待佇列 68
2.3.1 等待佇列原理 68
2.3.2 阻塞式I/O實例 68
2.3.3 完成事件 70
2.4 關閉中斷 71
第3章 記憶體管理與鍊表 72
3.1 物理地址和虛擬地址 72
3.2 記憶體分配與釋放 72
3.3 IO連線埠到虛擬地址的映射 73
3.3.1 靜態映射 73
3.3.2 動態映射 75
3.4 核心空間到用戶空間的映射 76
3.4.1 核心空間到用戶空間的地址
映射原理 76
3.4.2 mmap地址映射實例 78
3.5 核心鍊表 80
3.5.1 Linux核心中的鍊表 80
3.5.2 核心鍊表實例 81
第4章 延遲處理 83
4.1 核心執行緒 83
4.2 軟中斷機制 85
4.2.1 軟中斷原理 85
4.2.2 tasklet 87
4.3 工作佇列 89
4.3.1 工作佇列原理 89
4.3.2 工作佇列實例 91
4.4 核心時間 92
4.4.1 Linux中的時間概念 92
4.4.2 Linux中的延遲 93
4.4.3 核心定時器 93
第5章 簡單設備驅動程式 96
5.1 暫存器訪問 96
5.1.1 S3C6410地址映射 96
5.1.2 S3C6410看門狗驅動程式實例 98
5.1.3 S3C6410蜂鳴器驅動程式實例 102
5.2 電平控制 107
5.2.1 S3C6410 LED驅動程式實例 107
5.2.2 掃描型S3C6410按鍵驅動
程式實例 109
5.3 時序產生 112
5.3.1 時序圖原理 112
5.3.2 AT24C02晶片原理 112
5.3.3 AT24C02驅動程式開發實例 115
5.4 硬中斷處理 123
5.4.1 硬中斷處理原理 123
5.4.2 中斷型S3C6410按鍵驅動
程式實例 127
5.5 Linux I/O連線埠控制 132
5.5.1 Linux I/O連線埠讀寫 132
5.5.2 在套用層訪問Linux I/O
連線埠 133
5.5.3 /dev/port設備 134
第6章 深入Linux核心 135
6.1 嵌入式Linux系統構成 135
6.2 Linux核心導讀 136
6.2.1 Linux核心組成 136
6.2.2 Linux的代碼結構 137
6.2.3 核心Makefile 138
6.2.4 S3C6410硬體初始化 139
6.3 Linux檔案系統 141
6.3.1 虛擬檔案系統 141
6.3.2 根檔案系統 143
6.3.3 檔案系統載入 143
6.3.4 ext3檔案系統 145
6.4 Flash檔案系統 145
6.4.1 MTD設備 145
6.4.2 MTD字元設備 148
6.4.3 MTD塊設備 150
6.4.4 cramfs檔案系統 153
6.4.5 JFFS2檔案系統 153
6.4.6 YAFFS檔案系統 155
6.4.7 檔案系統總結 156
6.5 Linux核心移植 156
6.5.1 體系配置 156
6.5.2 添加yaffs2 157
6.5.3 Nand flash驅動程式移植 157
6.5.4 配置啟動參數 159
6.5.5 移植RTC驅動程式 160
6.6 根檔案系統製作 162
6.6.1 Busybox 162
6.6.2 shell基礎 165
6.6.3 根檔案系統構建實例 166
6.7 udev模型 167
6.7.1 udev模型原理 167
6.7.2 mdev的使用 167
第7章 I2C匯流排驅動程式 169
7.1 Linux的I2C驅動程式架構 169
7.1.1 I2C適配器 169
7.1.2 I2C算法 170
7.1.3 I2C驅動程式結構 170
7.1.4 I2C從設備 171
7.1.5 i2c-dev設備層 171
7.2 Linux I2C驅動程式開發 174
7.2.1 S3C2410X的I2C控制器 174
7.2.2 S3C2410X的I2C驅動程式
分析 175
7.3 S3C2410的I2C訪問實例 182
7.4 I2C客戶端驅動程式 185
第8章 TTY與串口驅動程式 190
8.1 TTY概念 190
8.2 Linux TTY驅動程式體系 190
8.2.1 TTY驅動程式調用關係 190
8.2.2 TTY驅動程式原理 191
8.3 線路規程 194
8.4 串口驅動程式與TTY 196
8.4.1 串口設備驅動程式原理 196
8.4.2 S3C6410的串口驅動程式
實例 199
8.5 TTY套用層 202
第9章 網路設備驅動程式 205
9.1 DM9000網卡驅動程式
開發 205
9.1.1 DM9000原理 205
9.1.2 DM9000X驅動程式分析 207
9.1.3 DM9000網口驅動程式移植 215
9.2 NFS根檔案系統搭建 219
9.2.1 主機配置 219
9.2.2 NFS根檔案系統搭建實例 220
9.3 netlink Socket 224
9.3.1 netlink機制 224
9.3.2 netlink套用層編程 228
9.3.3 netlink驅動程式實例 229
第10章 framebuffer驅動程式 232
10.1 Linux framebuffer驅動
程式原理 232
10.1.1 framebuffer核心數據結構 232
10.1.2 framebuffer操作接口 234
10.1.3 framebuffer驅動程式的檔案
接口 236
10.1.4 framebuffer驅動程式框架 236
10.2 S3C6410 顯示控制器 238
10.3 S3C6410 LCD驅動程式實例 243
10.4 framebuffer套用層 250
10.5 Qt4界面系統移植 251
第11章 輸入子系統驅動程式 253
11.1 Linux輸入子系統概述 253
11.1.1 input_dev結構 253
11.1.2 輸入事件 255
11.2 input_handler 256
11.2.1 Input Handler層 256
11.2.2 常用的Input Handler 259
11.3 輸入設備套用層 261
11.4 鍵盤輸入設備驅動程式
實例 262
11.5 event接口 267
11.6 觸控螢幕驅動程式實例 270
11.6.1 S3C6410觸控螢幕控制器 270
11.6.2 S3C6410觸控螢幕驅動程式
設計 273
11.7 觸控螢幕校準 282
11.7.1 觸控螢幕校準原理 282
11.7.2 利用TSLIB庫校準觸控螢幕 282
第12章 USB驅動程式 284
12.1 USB體系概述 284
12.1.1 USB系統組成 284
12.1.2 USB主機 284
12.1.3 USB設備邏輯層次 285
12.2 Linux USB驅動程式體系 287
12.2.1 USB總體結構 287
12.2.2 USB設備驅動程式 287
12.2.3 主機控制器驅動程式 288
12.2.4 USB請求塊urb 289
12.2.5 USB請求塊的填充 291
12.3 S3C6410 USB主機控制器
驅動程式 292
12.3.1 USB主機控制器驅動程式
分析 292
12.3.2 S3C6410 USB驅動程式
載入 294
12.4 USB鍵盤設備驅動程式
分析 296
12.5 USB Gadget驅動程式 301
12.5.1 Linux USB Gadget驅動程式 301
12.5.2 Linux USB Gadget驅動程式
實例 302
第13章 音頻設備驅動程式 303
13.1 ALSA音頻體系 303
13.2 ALSA驅動層API 304
13.2.1 音效卡和設備管理 304
13.2.2 PCM API 304
13.2.3 控制與混音API 305
13.2.4 AC97 API 306
13.2.5 SOC層驅動 307
13.3 ALSA驅動程式實例 308
13.3.1 S3C6410的AC97控制
單元 308
13.3.2 S3C6410音效卡電路原理 309
13.3.3 S3C6410的數字音頻接口 310
13.3.4 wm9713的數字音頻接口 313
13.4 ALSA音頻編程接口 316
13.4.1 ALSA PCM接口實例 316
13.4.2 ALSA MIDI接口實例 320
13.4.3 ALSA mixer接口實例 321
13.4.4 ALSA timer接口實例 322
第14章 video4linux2視頻
驅動程式 327
14.1 video4linux2驅動程式
架構 327
14.1.1 video4linux2驅動程式的
註冊 327
14.1.2 v4l2_fops接口 331
14.1.3 常用的結構 332
14.1.4 video4linux2的ioctl函式 333
14.2 S3C6410攝像頭驅動程式
分析 333
14.2.1 電路原理 333
14.2.2 驅動程式分析 334
14.3 video4linux2套用層實例 339
第15章 SD卡驅動程式 346
15.1 Linux SD卡驅動程式體系 346
15.1.1 SD卡電路原理 346
15.1.2 MMC卡驅動程式架構 347
15.1.3 MMC卡驅動程式相關
結構 347
15.1.4 MMC卡塊設備驅動程式 350
15.1.5 SD卡主機控制器接口驅動
程式 356
15.2 S3C6410 SD卡控制器驅動
程式分析 360
15.2.1 電路原理 360
15.2.2 S3C6410 SDHCI驅動
程式原理 360
15.2.3 SD卡的載入實例 364
參考文獻 366