精通Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)
定 價(jià):89 元
- 作者:[印]斯里克里斯?jié)h·溫卡特斯瓦蘭(Sreekrishnan Venkateswaran)
- 出版時(shí)間:2016/4/1
- ISBN:9787115402516
- 出 版 社:人民郵電出版社
- 中圖法分類:TP316.89
- 頁(yè)碼:468
- 紙張:
- 版次:1
- 開(kāi)本:16K
《精通Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)》是Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)領(lǐng)域的著作。全書基于2.6內(nèi)核,不僅透徹講解了基本概念和技術(shù),更深入探討了其他書沒(méi)有涵蓋或淺嘗輒止的許多重要主題和關(guān)鍵難點(diǎn),如PCMCIA、I2C和USB等外部總線以及視頻、音頻、無(wú)線連網(wǎng)和閃存等驅(qū)動(dòng)程序的開(kāi)發(fā),并講解了相關(guān)的內(nèi)核源碼文件,給出了完整的開(kāi)發(fā)實(shí)例。
《精通Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)》適合中高級(jí)Linux開(kāi)發(fā)人員閱讀。
全面深入的Linux設(shè)備驅(qū)動(dòng)程序名著
Linux技術(shù)大師力作
大量底層技術(shù)內(nèi)幕首次公開(kāi)
時(shí)至今日,Linux操作系統(tǒng)充分體現(xiàn)了其跨平臺(tái)、開(kāi)源、支持眾多應(yīng)用軟件和網(wǎng)路協(xié)議等優(yōu)點(diǎn),已經(jīng)成為應(yīng)用廣泛的開(kāi)發(fā)平臺(tái)。
在這部貼近實(shí)戰(zhàn)、實(shí)例豐富的著作中,享譽(yù)世界的Linux驅(qū)動(dòng)程序開(kāi)發(fā)大師將與你面對(duì)面,系統(tǒng)深入地闡述如何為各種設(shè)備開(kāi)發(fā)可靠的驅(qū)動(dòng)程序。在回顧了驅(qū)動(dòng)程序開(kāi)發(fā)的各種基礎(chǔ)知識(shí)和新的Linux 2.6內(nèi)核相關(guān)特性之后,作者不僅講述了其他設(shè)備驅(qū)動(dòng)程序圖書中都會(huì)涉及的比較容易的內(nèi)容,更迎難而上,深入探討了包括嵌入式Linux開(kāi)發(fā)在內(nèi)的驅(qū)動(dòng)程序開(kāi)發(fā)中必須面對(duì)的難點(diǎn),比如PCMCIA、USB、I2C、視頻、音頻、內(nèi)存、無(wú)線通信等,節(jié)食了許多技術(shù)內(nèi)幕。對(duì)每種驅(qū)動(dòng)程序,書中除了剖析關(guān)鍵技術(shù),還帶你查看相關(guān)的內(nèi)核源代碼,提供完整的實(shí)例。
Sreekrishnan Venkateswaran,世界Linux開(kāi)發(fā)技術(shù)專家。在IBM工作多年,有豐富的嵌入式Linux和驅(qū)動(dòng)程序開(kāi)發(fā)經(jīng)驗(yàn),曾將Linux移植到了手表、音樂(lè)播放器、VoIP電話、心臟起搏器以及遠(yuǎn)程門診監(jiān)控系統(tǒng)等設(shè)備上。目前是IBM印度公司的嵌入式解決方案組負(fù)責(zé)人。他曾擔(dān)任Linux Magazine的特邀編輯,主持內(nèi)核技術(shù)專欄。
第1章 引言 1
1.1 演進(jìn) 1
1.2 GNU Copyleft 2
1.3 kernel.org 2
1.4 郵件列表和論壇 3
1.5 Linux發(fā)行版 3
1.6 查看源代碼 4
1.7 編譯內(nèi)核 7
1.8 可加載的模塊 8
1.9 整裝待發(fā) 9
第2章 內(nèi)核 11
2.1 啟動(dòng)過(guò)程 11
2.1.1 BIOS-provided physical RAM map 12
2.1.2 758MB LOWMEM available 14
2.1.3 Kernel command line: ro
root=/dev/hda1 14
2.1.4 Calibrating delay...1197.46
BogoMIPS (lpj=2394935) 15
2.1.5 Checking HLT instruction 16
2.1.6 NET: Registered protocol family 2 17
2.1.7 Freeing initrd memory: 387k freed 17
2.1.8 io scheduler anticipatory
registered (default) 18
2.1.9 Setting up standard PCI resources 18
2.1.10 EXT3-fs: mounted filesystem 19
2.1.11 INIT: version 2.85 booting 19
2.2 內(nèi)核模式和用戶模式 20
2.3 進(jìn)程上下文和中斷上下文 20
2.4 內(nèi)核定時(shí)器 21
2.4.1 HZ和Jiffies 21
2.4.2 長(zhǎng)延時(shí) 22
2.4.3 短延時(shí) 24
2.4.4 Pentium時(shí)間戳計(jì)數(shù)器 24
2.4.5 實(shí)時(shí)鐘 25
2.5 內(nèi)核中的并發(fā) 26
2.5.1 自旋鎖和互斥體 26
2.5.2 原子操作 30
2.5.3 讀—寫鎖 31
2.5.4 調(diào)試 32
2.6 proc文件系統(tǒng) 32
2.7 內(nèi)存分配 33
2.8 查看源代碼 34
第3章 內(nèi)核組件 37
3.1 內(nèi)核線程 37
3.1.1 創(chuàng)建內(nèi)核線程 37
3.1.2 進(jìn)程狀態(tài)和等待隊(duì)列 41
3.1.3 用戶模式輔助程序 42
3.2 輔助接口 43
3.2.1 鏈表 44
3.2.2 散列鏈表 49
3.2.3 工作隊(duì)列 49
3.2.4 通知鏈 51
3.2.5 完成接口 54
3.2.6 kthread輔助接口 56
3.2.7 錯(cuò)誤處理助手 57
3.3 查看源代碼 58
第4章 基本概念 61
4.1 設(shè)備和驅(qū)動(dòng)程序介紹 61
4.2 中斷處理 63
4.2.1 中斷上下文 63
4.2.2 分配IRQ號(hào) 64
4.2.3 設(shè)備實(shí)例:導(dǎo)航桿 65
4.2.4 softirq和tasklet 68
4.3 Linux設(shè)備模型 71
4.3.1 udev 71
4.3.2 sysfs、kobject和設(shè)備類 73
4.3.3 熱插拔和冷插拔 76
4.3.4 微碼下載 76
4.3.5 模塊自動(dòng)加載 77
4.4 內(nèi)存屏障 78
4.5 電源管理 79
4.6 查看源代碼 79
第5章 字符設(shè)備驅(qū)動(dòng)程序 81
5.1 字符設(shè)備驅(qū)動(dòng)程序基礎(chǔ) 81
5.2 設(shè)備實(shí)例:系統(tǒng)CMOS 82
5.2.1 驅(qū)動(dòng)程序初始化 83
5.2.2 打開(kāi)與釋放 86
5.2.3 數(shù)據(jù)交換 88
5.2.4 查找 92
5.2.5 控制 94
5.3 檢測(cè)數(shù)據(jù)可用性 95
5.3.1 輪詢 95
5.3.2 Fasync 98
5.4 和并行端口交互 99
5.5 RTC子系統(tǒng) 108
5.6 偽字符驅(qū)動(dòng)程序 109
5.7 混雜驅(qū)動(dòng)程序 110
5.8 字符設(shè)備驅(qū)動(dòng)程序注意事項(xiàng) 115
5.9 查看源代碼 115
第6章 串行設(shè)備驅(qū)動(dòng)程序 118
6.1 層次架構(gòu) 119
6.2 UART驅(qū)動(dòng)程序 121
6.2.1 設(shè)備實(shí)例:手機(jī) 122
6.2.2 RS-485 132
6.3 TTY驅(qū)動(dòng)程序 132
6.4 線路規(guī)程 134
6.5 查看源代碼 141
第7章 輸入設(shè)備驅(qū)動(dòng)程序 143
7.1 輸入事件驅(qū)動(dòng)程序 144
7.2 輸入設(shè)備驅(qū)動(dòng)程序 150
7.2.1 serio 150
7.2.2 鍵盤 150
7.2.3 鼠標(biāo) 152
7.2.4 觸摸控制器 157
7.2.5 加速度傳感器 158
7.2.6 輸出事件 158
7.3 調(diào)試 159
7.4 查看源代碼 160
第8章 I2C協(xié)議 161
8.1 I2C/SMBus是什么 161
8.2 I2C核心 162
8.3 總線事務(wù) 164
8.4 設(shè)備實(shí)例:EEPROM 164
8.4.1 初始化 165
8.4.2 探測(cè)設(shè)備 167
8.4.3 檢查適配器的功能 169
8.4.4 訪問(wèn)設(shè)備 169
8.4.5 其他函數(shù) 170
8.5 設(shè)備實(shí)例:實(shí)時(shí)時(shí)鐘 171
8.6 i2c-dev 174
8.7 使用LM-Sensors監(jiān)控硬件 174
8.8 SPI總線 174
8.9 1-Wire總線 176
8.10 調(diào)試 176
8.11 查看源代碼 176
第9章 PCMCIA和CF 179
9.1 PCMCIA/CF是什么 179
9.2 Linux-PCMCIA子系統(tǒng) 181
9.3 主機(jī)控制器驅(qū)動(dòng)程序 183
9.4 PCMCIA核心 183
9.5 驅(qū)動(dòng)程序服務(wù) 183
9.6 客戶驅(qū)動(dòng)程序 183
9.6.1 數(shù)據(jù)結(jié)構(gòu) 184
9.6.2 設(shè)備實(shí)例:PCMCIA卡 185
9.7 將零件組裝在一起 188
9.8 PCMCIA存儲(chǔ) 189
9.9 串行PCMCIA 189
9.10 調(diào)試 191
9.11 查看源代碼 191
第10章 PCI 193
10.1 PCI系列 193
10.2 尋址和識(shí)別 195
10.3 訪問(wèn)PCI 198
10.3.1 配置區(qū) 198
10.3.2 I/O和內(nèi)存 199
10.4 DMA 200
10.5 設(shè)備實(shí)例:以太網(wǎng)—調(diào)制解調(diào)器卡 203
10.5.1 初始化和探測(cè) 203
10.5.2 數(shù)據(jù)傳輸 209
10.6 調(diào)試 214
10.7 查看源代碼 214
第11章 USB 216
11.1 USB體系架構(gòu) 216
11.1.1 總線速度 218
11.1.2 主機(jī)控制器 218
11.1.3 傳輸模式 219
11.1.4 尋址 219
11.2 Linux-USB子系統(tǒng) 220
11.3 驅(qū)動(dòng)程序的數(shù)據(jù)結(jié)構(gòu) 221
11.3.1 usb_device結(jié)構(gòu)體 221
11.3.2 URB 222
11.3.3 管道 223
11.3.4 描述符結(jié)構(gòu) 223
11.4 枚舉 225
11.5 設(shè)備實(shí)例:遙測(cè)卡 225
11.5.1 初始化和探測(cè)過(guò)程 226
11.5.2 卡寄存器的訪問(wèn) 230
11.5.3 數(shù)據(jù)傳輸 233
11.6 類驅(qū)動(dòng)程序 236
11.6.1 大容量存儲(chǔ)設(shè)備 236
11.6.2 USB-串行端口轉(zhuǎn)換器 241
11.6.3 人機(jī)接口設(shè)備 243
11.6.4 藍(lán)牙 243
11.7 gadget驅(qū)動(dòng)程序 243
11.8 調(diào)試 244
11.9 查看源代碼 245
第12章 視頻驅(qū)動(dòng)程序 247
12.1 顯示架構(gòu) 247
12.2 Linux視頻子系統(tǒng) 249
12.3 顯示參數(shù) 251
12.4 幀緩沖API 252
12.5 幀緩沖驅(qū)動(dòng)程序 254
12.6 控制臺(tái)驅(qū)動(dòng)程序 265
12.6.1 設(shè)備實(shí)例:手機(jī) 266
12.6.2 啟動(dòng)logo 270
12.7 調(diào)試 270
12.8 查看源代碼 271
第13章 音頻驅(qū)動(dòng)程序 273
13.1 音頻架構(gòu) 273
13.2 Linux聲音子系統(tǒng) 275
13.3 設(shè)備實(shí)例:MP3播放器 277
13.3.1 驅(qū)動(dòng)程序函數(shù)和結(jié)構(gòu)體 278
13.3.2 ALSA編程 287
13.4 調(diào)試 288
13.5 查看源代碼 289
第14章 塊設(shè)備驅(qū)動(dòng)程序 291
14.1 存儲(chǔ)技術(shù) 291
14.2 Linux塊I/O層 295
14.3 I/O調(diào)度器 295
14.4 塊驅(qū)動(dòng)程序數(shù)據(jù)結(jié)構(gòu)和方法 296
14.5 設(shè)備實(shí)例:簡(jiǎn)單存儲(chǔ)控制器 298
14.5.1 初始化 299
14.5.2 塊設(shè)備操作 301
14.5.3 磁盤訪問(wèn) 302
14.6 高級(jí)主題 304
14.7 調(diào)試 306
14.8 查看源代碼 306
第15章 網(wǎng)絡(luò)接口卡 308
15.1 驅(qū)動(dòng)程序數(shù)據(jù)結(jié)構(gòu) 308
15.1.1 套接字緩沖區(qū) 309
15.1.2 網(wǎng)絡(luò)設(shè)備接口 310
15.1.3 激活 311
15.1.4 數(shù)據(jù)傳輸 311
15.1.5 看門狗 311
15.1.6 統(tǒng)計(jì) 312
15.1.7 配置 313
15.1.8 總線相關(guān)內(nèi)容 314
15.2 與協(xié)議層會(huì)話 314
15.2.1 接收路徑 314
15.2.2 發(fā)送路徑 315
15.2.3 流量控制 315
15.3 緩沖區(qū)管理和并發(fā)控制 315
15.4 設(shè)備實(shí)例:以太網(wǎng)NIC 316
15.5 ISA網(wǎng)絡(luò)驅(qū)動(dòng)程序 321
15.6 ATM 321
15.7 網(wǎng)絡(luò)吞吐量 322
15.7.1 驅(qū)動(dòng)程序性能 322
15.7.2 協(xié)議性能 323
15.8 查看源代碼 324
第16章 Linux無(wú)線設(shè)備驅(qū)動(dòng) 326
16.1 藍(lán)牙 327
16.1.1 BlueZ 328
16.1.2 設(shè)備實(shí)例:CF卡 329
16.1.3 設(shè)備實(shí)例:USB適配器 330
16.1.4 RFCOMM 331
16.1.5 網(wǎng)絡(luò) 332
16.1.6 HID 334
16.1.7 音頻 334
16.1.8 調(diào)試 334
16.1.9 關(guān)于源代碼 334
16.2 紅外 335
16.2.1 Linux-IrDA 335
16.2.2 設(shè)備實(shí)例:超級(jí)I/O芯片 337
16.2.3 設(shè)備實(shí)例:IR Dongle 338
16.2.4 IrCOMM 340
16.2.5 聯(lián)網(wǎng) 340
16.2.6 IrDA套接字 341
16.2.7 LIRC 341
16.2.8 查看源代碼 342
16.3 WiFi 343
16.3.1 配置 343
16.3.2 設(shè)備驅(qū)動(dòng)程序 346
16.3.3 查看源代碼 347
16.4 蜂窩網(wǎng)絡(luò) 347
16.4.1 GPRS 347
16.4.2 CDMA 349
16.5 當(dāng)前趨勢(shì) 350
第17章 存儲(chǔ)技術(shù)設(shè)備 352
17.1 什么是閃存 352
17.2 Linux-MTD子系統(tǒng) 353
17.3 映射驅(qū)動(dòng)程序 353
17.4 NOR芯片驅(qū)動(dòng)程序 358
17.5 NAND芯片驅(qū)動(dòng)程序 359
17.6 用戶模塊 361
17.6.1 塊設(shè)備模擬 361
17.6.2 字符設(shè)備模擬 361
17.6.3 JFFS2 362
17.6.4 YAFFS2 363
17.7 MTD工具 363
17.8 配置MTD 363
17.9 XIP 364
17.10 FWH 364
17.11 調(diào)試 367
17.12 查看源代碼 367
第18章 嵌入式Linux 369
18.1 挑戰(zhàn) 369
18.2 元器件選擇 370
18.3 工具鏈 371
18.4 Bootloader 372
18.5 內(nèi)存布局 374
18.6 內(nèi)核移植 375
18.7 嵌入式驅(qū)動(dòng)程序 376
18.7.1 閃存 377
18.7.2 UART 377
18.7.3 按鈕和滾輪 378
18.7.4 PCMCIA/CF 378
18.7.5 SD/MMC 378
18.7.6 USB 378
18.7.7 RTC 378
18.7.8 音頻 378
18.7.9 觸摸屏 379
18.7.10 視頻 379
18.7.11 CPLD/FPGA 379
18.7.12 連接性 379
18.7.13 專用領(lǐng)域電子器件 380
18.7.14 更多驅(qū)動(dòng)程序 380
18.8 根文件系統(tǒng) 380
18.8.1 NFS掛載的根文件系統(tǒng) 381
18.8.2 緊湊型中間件 382
18.9 測(cè)試基礎(chǔ)設(shè)施 383
18.10 調(diào)試 383
18.10.1 電路板返工 384
18.10.2 調(diào)試器 385
第19章 用戶空間的驅(qū)動(dòng)程序 386
19.1 進(jìn)程調(diào)度和響應(yīng)時(shí)間 387
19.1.1 原先的調(diào)度器 387
19.1.2 O(1)調(diào)度器 387
19.1.3 CFS 388
19.1.4 響應(yīng)時(shí)間 388
19.2 訪問(wèn)I/O區(qū)域 390
19.3 訪問(wèn)內(nèi)存區(qū)域 393
19.4 用戶模式SCSI 395
19.5 用戶模式USB 397
19.6 用戶模式I2C 400
19.7 UIO 401
19.8 查看源代碼 402
第20章 其他設(shè)備和驅(qū)動(dòng)程序 403
20.1 ECC報(bào)告 403
20.2 頻率調(diào)整 407
20.3 嵌入式控制器 408
20.4 ACPI 408
20.5 ISA與MCA 410
20.6 火線 410
20.7 智能輸入/輸出 411
20.8 業(yè)余無(wú)線電 411
20.9 VoIP 411
20.10 高速互聯(lián) 412
20.10.1 InfiniBand 413
20.10.2 RapidIO 413
20.10.3 光纖通道 413
20.10.4 iSCSI 413
第21章 調(diào)試設(shè)備驅(qū)動(dòng)程序 414
21.1 kdb 414
21.1.1 進(jìn)入調(diào)試器 415
21.1.2 kdb 415
21.1.3 kgdb 417
21.1.4 gdb 420
21.1.5 JTAG調(diào)試器 421
21.1.6 下載 423
21.2 內(nèi)核探測(cè)器 423
21.2.1 kprobe 423
21.2.2 jprobe 427
21.2.3 返回探針 429
21.2.4 局限性 431
21.2.5 查看源代碼 431
21.3 kexec與kdump 431
21.3.1 kexec 432
21.3.2 kdump與kexec協(xié)同工作 432
21.3.3 kdump 433
21.3.4 查看源代碼 437
21.4 性能剖析 437
21.4.1 利用OProfile剖析內(nèi)核性能 438
21.4.2 利用gprof剖析應(yīng)用程序性能 440
21.5 跟蹤 441
21.6 LTP 444
21.7 UML 444
21.8 診斷工具 444
21.9 內(nèi)核修改配置選項(xiàng) 444
21.10 測(cè)試設(shè)備 445
第22章 維護(hù)與發(fā)布 446
22.1 代碼風(fēng)格 446
22.2 修改標(biāo)記 446
22.3 版本控制 447
22.4 一致性檢查 447
22.5 構(gòu)建腳本 448
22.6 可移植代碼 450
第23章 結(jié)束語(yǔ) 451
23.1 流程一覽表 451
23.2 下一步該做什么 452
附錄A Linux匯編 453
附錄B Linux與BIOS 457
附錄C seq文件 461