本書結(jié)合大量實(shí)例,在基于ARM Cortex-A9四核處理器Exynos4412的硬件教學(xué)平臺(tái)和PC機(jī)上,全面詳細(xì)講解了Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)。主要內(nèi)容包含開(kāi)發(fā)環(huán)境的搭建,內(nèi)核模塊,字符設(shè)備驅(qū)動(dòng)框架,高級(jí)I/O,中斷和時(shí)間管理,互斥和同步,內(nèi)存和DMA,Linux設(shè)備模型,外設(shè)的驅(qū)動(dòng)實(shí)例,總線類設(shè)備驅(qū)動(dòng),塊設(shè)備驅(qū)動(dòng),網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)和內(nèi)核調(diào)試技巧。對(duì)每一個(gè)知識(shí)點(diǎn)都有一個(gè)對(duì)應(yīng)的典型實(shí)例,大多數(shù)實(shí)例既可以在上面說(shuō)到的嵌入式平臺(tái)上運(yùn)行,也可以在PC機(jī)上運(yùn)行。
華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心,是國(guó)內(nèi)成立較早、規(guī)模較大的專業(yè)嵌入式培訓(xùn)機(jī)構(gòu)。為滿足快速增長(zhǎng)的移動(dòng)開(kāi)發(fā)領(lǐng)域?qū)ndroid等主流嵌入式操作系統(tǒng)研發(fā)人才的需求,華清遠(yuǎn)見(jiàn)在多年高端嵌入式專業(yè)培訓(xùn)和豐富的企業(yè)內(nèi)訓(xùn)實(shí)施經(jīng)驗(yàn)的基礎(chǔ)上,于2004年正式成立華清遠(yuǎn)見(jiàn)3G學(xué)院,學(xué)院充分整合行業(yè)經(jīng)驗(yàn)及專業(yè)領(lǐng)域的企業(yè)合作資源優(yōu)勢(shì),打造出專業(yè)、科學(xué)的實(shí)訓(xùn)體系,幫助合作院校時(shí)刻緊跟行業(yè)用人需求的新趨勢(shì),引導(dǎo)畢業(yè)生在知識(shí)結(jié)構(gòu)上更好地實(shí)現(xiàn)與企業(yè)真實(shí)需求的對(duì)接,從而有效提高其就業(yè)競(jìng)爭(zhēng)優(yōu)勢(shì),順利進(jìn)入專業(yè)研發(fā)領(lǐng)域。歡迎訪問(wèn)華清遠(yuǎn)見(jiàn)教育集團(tuán)官方網(wǎng)站:http://www.hqyj.com及3G學(xué)院官方網(wǎng)站:http://www.3g-edu.org獲取更新資訊。
第1章 概述 1
第2章 內(nèi)核模塊 6
2.1 第一個(gè)內(nèi)核模塊程序 7
2.2 內(nèi)核模塊的相關(guān)工具 10
2.3 內(nèi)核模塊一般的形式 11
2.4 將多個(gè)源文件編譯生成一個(gè)內(nèi)核模塊 13
2.5 內(nèi)核模塊參數(shù) 15
2.6 內(nèi)核模塊依賴 17
2.7 關(guān)于內(nèi)核模塊的進(jìn)一步討論 20
2.8 習(xí)題 21
第3章 字符設(shè)備驅(qū)動(dòng) 23
3.1 字符設(shè)備驅(qū)動(dòng)基礎(chǔ) 24
3.2 字符設(shè)備驅(qū)動(dòng)框架 30
3.3 虛擬串口設(shè)備 35
3.4 虛擬串口設(shè)備驅(qū)動(dòng) 35
3.5 一個(gè)驅(qū)動(dòng)支持多個(gè)設(shè)備 39
3.6 習(xí)題 45
第4章 高級(jí)I/O操作 46
4.1 ioctl設(shè)備操作 47
4.2 proc文件操作 56
4.3 非阻塞型I/O 58
4.4 阻塞型I/O 60
4.5 I/O多路復(fù)用 65
4.6 異步I/O 69
4.7 幾種I/O模型總結(jié) 73
4.8 異步通知 74
4.9 mmap設(shè)備文件操作 83
4.10 定位操作 88
4.11 習(xí)題 90
第5章 中斷和時(shí)間管理 92
5.1 中斷進(jìn)入過(guò)程 93
5.2 驅(qū)動(dòng)中的中斷處理 98
5.3 中斷下半部 101
5.3.1 軟中斷 102
5.3.2 tasklet 104
5.3.3 工作隊(duì)列 106
5.4 延時(shí)控制 108
5.5 定時(shí)操作 109
5.5.1 低分辨率定時(shí)器 109
5.5.2 高分辨率定時(shí)器 112
5.6 習(xí)題 114
第6章 互斥和同步 116
6.1 一種典型的競(jìng)態(tài) 117
6.2 內(nèi)核中的并發(fā) 117
6.3 中斷屏蔽 118
6.4 原子變量 119
6.5 自旋鎖 120
6.6 讀寫鎖 122
6.7 順序鎖 123
6.8 信號(hào)量 125
6.9 讀寫信號(hào)量 127
6.10 互斥量 127
6.11 RCU機(jī)制 128
6.12 虛擬串口驅(qū)動(dòng)加入互斥 130
6.13 完成量 134
6.14 習(xí)題 135
第7章 內(nèi)存和DMA 137
7.1 內(nèi)存組織 138
7.2 按頁(yè)分配內(nèi)存 139
7.3 slab分配器 142
7.4 不連續(xù)內(nèi)存頁(yè)分配 144
7.5 per-CPU變量 145
7.6 動(dòng)態(tài)內(nèi)存實(shí)例 146
7.7 I/O內(nèi)存 147
7.8 DMA原理及映射 155
7.8.1 DMA工作原理 155
7.8.2 DMA映射 157
7.9 DMA統(tǒng)一編程接口 160
7.10 習(xí)題 164
第8章 Linux設(shè)備模型 166
8.1 設(shè)備模型基礎(chǔ) 167
8.2 總線、設(shè)備和驅(qū)動(dòng) 171
8.3 平臺(tái)設(shè)備及其驅(qū)動(dòng) 176
8.3.1 平臺(tái)設(shè)備 176
8.3.2 平臺(tái)驅(qū)動(dòng) 178
8.3.3 平臺(tái)驅(qū)動(dòng)簡(jiǎn)單實(shí)例 179
8.3.4 電源管理 182
8.3.5 udev和驅(qū)動(dòng)的自動(dòng)加載 183
8.3.6 使用平臺(tái)設(shè)備的LED驅(qū)動(dòng) 184
8.3.7 自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn) 190
8.4 Linux設(shè)備樹(shù) 193
8.4.1 Linux設(shè)備樹(shù)的由來(lái) 193
8.4.2 Linux設(shè)備樹(shù)的目的 194
8.4.3 Linux設(shè)備樹(shù)的使用 195
8.4.4 使用設(shè)備樹(shù)的LED驅(qū)動(dòng) 202
8.5 習(xí)題 204
第9章 字符設(shè)備驅(qū)動(dòng)實(shí)例 205
9.1 LED驅(qū)動(dòng) 206
9.2 基于中斷的簡(jiǎn)單按鍵驅(qū)動(dòng) 209
9.3 基于輸入子系統(tǒng)的按鍵驅(qū)動(dòng) 213
9.4 ADC驅(qū)動(dòng) 222
9.5 PWM驅(qū)動(dòng) 231
9.6 RTC驅(qū)動(dòng) 239
第10章 總線類設(shè)備驅(qū)動(dòng) 243
10.1 I2C設(shè)備驅(qū)動(dòng) 244
10.1.1 I2C協(xié)議簡(jiǎn)介 244
10.1.2 Linux I2C驅(qū)動(dòng) 246
10.1.3 I2C設(shè)備驅(qū)動(dòng)實(shí)例 251
10.2 SPI設(shè)備驅(qū)動(dòng) 258
10.2.1 SPI協(xié)議簡(jiǎn)介 258
10.2.2 Linux SPI驅(qū)動(dòng) 259
10.2.3 SPI設(shè)備驅(qū)動(dòng)范例 264
10.3 USB設(shè)備驅(qū)動(dòng) 268
10.3.1 USB協(xié)議簡(jiǎn)介 268
10.3.2 Linux USB驅(qū)動(dòng) 271
10.3.3 USB設(shè)備驅(qū)動(dòng)實(shí)例 274
10.4 PCI設(shè)備驅(qū)動(dòng) 283
10.4.1 PCI協(xié)議簡(jiǎn)介 283
10.4.2 Linux PCI驅(qū)動(dòng) 287
10.4.3 PCI設(shè)備驅(qū)動(dòng)實(shí)例 288
10.5 習(xí)題 296
第11章 塊設(shè)備驅(qū)動(dòng) 298
11.1 磁盤結(jié)構(gòu) 299
11.2 塊設(shè)備內(nèi)核組件 300
11.3 塊設(shè)備驅(qū)動(dòng)核心數(shù)據(jù)結(jié)構(gòu)和函數(shù) 301
11.4 塊設(shè)備驅(qū)動(dòng)實(shí)例 308
11.5 習(xí)題 316
第12章 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng) 317
12.1 網(wǎng)絡(luò)層次結(jié)構(gòu) 318
12.2 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)核心數(shù)據(jù)結(jié)構(gòu)和函數(shù) 319
12.3 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)實(shí)例 327
12.4 DM9000網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)代碼分析 333
12.5 NAPI 340
12.6 習(xí)題 343
第13章 內(nèi)核調(diào)試技術(shù) 344
13.1 內(nèi)核調(diào)試方法 345
13.1.1 內(nèi)核調(diào)試概述 345
13.1.2 學(xué)會(huì)分析內(nèi)核源程序 346
13.1.3 調(diào)試方法介紹 346
13.2 內(nèi)核打印函數(shù) 350
13.2.1 內(nèi)核鏡像解壓前的串口輸出函數(shù) 350
13.2.2 內(nèi)核鏡像解壓后的串口輸出函數(shù) 352
13.2.3 內(nèi)核打印函數(shù) 353
13.3 獲取內(nèi)核信息 357
13.3.1 系統(tǒng)請(qǐng)求鍵 357
13.3.2 通過(guò)/proc接口 358
13.3.3 通過(guò)/sys接口 359
13.4 處理出錯(cuò)信息 362
13.4.1 oops信息 362
13.4.2 panic 364
13.4.3 通過(guò)ioctl方法 366
13.5 內(nèi)核源碼調(diào)試 367
13.6 習(xí)題 369
第14章 搭建開(kāi)發(fā)環(huán)境 370
14.1 準(zhǔn)備Linux開(kāi)發(fā)主機(jī) 371
14.2 安裝串口相關(guān)軟件 375
14.2.1 安裝串口驅(qū)動(dòng) 375
14.2.2 安裝串口終端軟件PuTTY 376
14.2.3 安裝串口終端軟件minicom 377
14.3 安裝TFTP和NFS服務(wù)器 379
14.4 準(zhǔn)備Linux內(nèi)核源碼 381
14.5 在目標(biāo)板上運(yùn)行Linux系統(tǒng) 382
14.6 源碼瀏覽及編輯器環(huán)境 386
習(xí)題答案 388
參考文獻(xiàn) 389