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