精通Linux 設備驅動程式開發

精通Linux 設備驅動程式開發

《精通Linux 設備驅動程式開發》是2010年6月人民郵電出版社出版的圖書,作者是(印)Sreekrishnan Venkateswaran,譯者是宋寶華、何昭然、史海濱、吳國成。

內容簡介

本書是linux設備驅動程式開發領域的權威著作。全書基於2.6核心,不僅透徹講解了基本概念和技術,更深入探討了其他書沒有涵蓋或淺嘗輒止的許多重要主題和關鍵難點,如pcmcia、i2c和usb等外部匯流排以及視頻、音頻、無線連網和快閃記憶體等驅動程式的開發,並講解了相關的核心源碼檔案,給出了完整的開發實例。

本書適合中高級linux開發人員閱讀。  

作者

Sreekrishnan Venkateswaran 世界頂級Linux開發技術專家。在IBM工作多年,有豐富的嵌入式Linux和驅動程式開發經驗,曾經將Linux移植到了手錶、音樂播放器、VoIP 電話、心臟起搏器以及遠程門診監控系統等設備上。目前負責IBM印度公司的嵌入式解決方案組。他曾擔任Linux Magazine的特邀編輯,主持核心技術專欄。

目錄

第1章 引言 1

1.1 演進 1

1.2 gnu copyleft 2

1.3 kernel. 2

1.4 郵件列表和論壇 3

1.5 linux發行版 3

1.6 查看原始碼 4

1.7 編譯核心 7

1.8 可載入的模組 8

1.9 整裝待發 9

第2章 核心 11

2.1 啟動過程 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 核心模式和用戶模式 20

2.3 進程上下文和中斷上下文 20

2.4 核心定時器 21

2.4.1 hz和jiffies 21

2.4.2 長延時 22

2.4.3 短延時 24

2.4.4 pentium時間戳計數器 24

2.4.5 實時鐘 25

2.5 核心中的並發 26

2.5.1 自旋鎖和互斥體 26

2.5.2 原子操作 30

2.5.3 讀—寫鎖 31

2.5.4 調試 32

2.6 proc檔案系統 32

2.7 記憶體分配 33

2.8 查看原始碼 34

第3章 核心組件 37

3.1 核心執行緒 37

3.1.1 創建核心執行緒 37

3.1.2 進程狀態和等待佇列 41

3.1.3 用戶模式輔助程式 42

3.2 輔助接口 43

3.2.1 鍊表 44

3.2.2 散列鍊表 49

3.2.3 工作佇列 49

3.2.4 通知鏈 51

3.2.5 完成接口 54

3.2.6 kthread輔助接口 56

3.2.7 錯誤處理助手 57

3.3 查看原始碼 58

第4章 基本概念 61

4.1 設備和驅動程式介紹 61

4.2 中斷處理 63

4.2.1 中斷上下文 63

4.2.2 分配irq號 64

4.2.3 設備實例:導航桿 65

4.2.4 softirq和tasklet 68

4.3 linux設備模型 71

4.3.1 udev 71

4.3.2 sysfs、kobject和設備類 73

4.3.3 熱插拔和冷插拔 76

4.3.4 微碼下載 76

4.3.5 模組自動載入 77

4.4 記憶體屏障 78

4.5 電源管理 79

4.6 查看原始碼 79

第5章 字元設備驅動程式 81

5.1 字元設備驅動程式基礎 81

5.2 設備實例:系統cmos 82

5.2.1 驅動程式初始化 83

5.2.2 打開與釋放 86

5.2.3 數據交換 88

5.2.4 查找 92

5.2.5 控制 94

5.3 檢測數據可用性 95

5.3.1 輪詢 95

5.3.2 fasync 98

5.4 和並行連線埠互動 99

5.5 rtc子系統 108

5.6 偽字元驅動程式 109

5.7 混雜驅動程式 110

5.8 字元設備驅動程式注意事項 115

5.9 查看原始碼 115

第6章 串列設備驅動程式 118

6.1 層次架構 119

6.2 uart驅動程式 121

6.2.1 設備實例:手機 122

6.2.2 rs-485 132

6.3 tty驅動程式 132

6.4 線路規程 134

6.5 查看原始碼 141

第7章 輸入設備驅動程式 143

7.1 輸入事件驅動程式 144

7.2 輸入設備驅動程式 150

7.2.1 serio 150

7.2.2 鍵盤 150

7.2.3 滑鼠 152

7.2.4 觸摸控制器 157

7.2.5 加速度感測器 158

7.2.6 輸出事件 158

7.3 調試 159

7.4 查看原始碼 160

第8章 i2c協定 161

8.1 i2c/smbus是什麼 161

8.2 i2c核心 162

8.3 匯流排事務 164

8.4 設備實例:eeprom 164

8.4.1 初始化 165

8.4.2 探測設備 167

8.4.3 檢查適配器的功能 169

8.4.4 訪問設備 169

8.4.5 其他函式 170

8.5 設備實例:實時時鐘 171

8.6 i2c-dev 174

8.7 使用lm-sensors監控硬體 174

8.8 spi匯流排 174

8.9 1-wire匯流排 176

8.10 調試 176

8.11 查看原始碼 176

第9章 pcmcia和cf 179

9.1 pcmcia/cf是什麼 179

9.2 linux-pcmcia子系統 181

9.3 主機控制器驅動程式 183

9.4 pcmcia核心 183

9.5 驅動程式服務 183

9.6 客戶驅動程式 183

9.6.1 數據結構 184

9.6.2 設備實例:pcmcia卡 185

9.7 將零件組裝在一起 188

9.8 pcmcia存儲 189

9.9 串列pcmcia 189

9.10 調試 191

9.11 查看原始碼 191

第10章 pci 193

10.1 pci系列 193

10.2 定址和識別 195

10.3 訪問pci 198

10.3.1 配置區 198

10.3.2 i/o和記憶體 199

10.4 dma 200

10.5 設備實例:乙太網—數據機卡 203

10.5.1 初始化和探測 203

10.5.2 數據傳輸 209

10.6 調試 214

10.7 查看原始碼 214

第11章 usb 216

11.1 usb體系架構 216

11.1.1 匯流排速度 218

11.1.2 主機控制器 218

11.1.3 傳輸模式 219

11.1.4 定址 219

11.2 linux-usb子系統 220

11.3 驅動程式的數據結構 221

11.3.1 usb_device結構體 221

11.3.2 urb 222

11.3.3 管道 223

11.3.4 描述符結構 223

11.4 枚舉 225

11.5 設備實例:遙測卡 225

11.5.1 初始化和探測過程 226

11.5.2 卡暫存器的訪問 230

11.5.3 數據傳輸 233

11.6 類驅動程式 236

11.6.1 大容量存儲設備 236

11.6.2 usb-串列連線埠轉換器 241

11.6.3 人機接口設備 243

11.6.4 藍牙 243

11.7 gadget驅動程式 243

11.8 調試 244

11.9 查看原始碼 245

第12章 視頻驅動程式 247

12.1 顯示架構 247

12.2 linux視頻子系統 249

12.3 顯示參數 251

12.4 幀緩衝api 252

12.5 幀緩衝驅動程式 254

12.6 控制台驅動程式 265

12.6.1 設備實例:手機 266

12.6.2 啟動logo 270

12.7 調試 270

12.8 查看原始碼 271

第13章 音頻驅動程式 273

13.1 音頻架構 273

13.2 linux聲音子系統 275

13.3 設備實例:mp3播放器 277

13.3.1 驅動程式函式和結構體 278

13.3.2 alsa編程 287

13.4 調試 288

13.5 查看原始碼 289

第14章 塊設備驅動程式 291

14.1 存儲技術 291

14.2 linux塊i/o層 295

14.3 i/o調度器 295

14.4 塊驅動程式數據結構和方法 296

14.5 設備實例:簡單存儲控制器 298

14.5.1 初始化 299

14.5.2 塊設備操作 301

14.5.3 磁碟訪問 302

14.6 高級主題 304

14.7 調試 306

14.8 查看原始碼 306

第15章 網路接口卡 308

15.1 驅動程式數據結構 308

15.1.1 套接字緩衝區 309

15.1.2 網路設備接口 310

15.1.3 激活 311

15.1.4 數據傳輸 311

15.1.5 看門狗 311

15.1.6 統計 312

15.1.7 配置 313

15.1.8 匯流排相關內容 314

15.2 與協定層會話 314

15.2.1 接收路徑 314

15.2.2 傳送路徑 315

15.2.3 流量控制 315

15.3 緩衝區管理和並發控制 315

15.4 設備實例:乙太網nic 316

15.5 isa網路驅動程式 321

15.6 atm 321

15.7 網路吞吐量 322

15.7.1 驅動程式性能 322

15.7.2 協定性能 323

15.8 查看原始碼 324

第16章 linux無線設備驅動 326

16.1 藍牙 327

16.1.1 bluez 328

16.1.2 設備實例:cf卡 329

16.1.3 設備實例:usb適配器 330

16.1.4 rfcomm 331

16.1.5 網路 332

16.1.6 hid 334

16.1.7 音頻 334

16.1.8 調試 334

16.1.9 關於原始碼 334

16.2 紅外 335

16.2.1 linux-irda 335

16.2.2 設備實例:超級i/o晶片 337

16.2.3 設備實例:ir dongle 338

16.2.4 ircomm 340

16.2.5 聯網 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 設備驅動程式 346

16.3.3 查看原始碼 347

16.4 蜂窩網路 347

16.4.1 gprs 347

16.4.2 cdma 349

16.5 當前趨勢 350

第17章 存儲技術設備 352

17.1 什麼是快閃記憶體 352

17.2 linux-mtd子系統 353

17.3 映射驅動程式 353

17.4 nor晶片驅動程式 358

17.5 nand晶片驅動程式 359

17.6 用戶模組 361

17.6.1 塊設備模擬 361

17.6.2 字元設備模擬 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 調試 367

17.12 查看原始碼 367

第18章 嵌入式linux 369

18.1 挑戰 369

18.2 元器件選擇 370

18.3 工具鏈 371

18.4 bootloader 372

18.5 記憶體布局 374

18.6 核心移植 375

18.7 嵌入式驅動程式 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 專用領域電子器件 380

18.7.14 更多驅動程式 380

18.8 根檔案系統 380

18.8.1 nfs掛載的根檔案系統 381

18.8.2 緊湊型中間件 382

18.9 測試基礎設施 383

18.10 調試 383

18.10.1 電路板返工 384

18.10.2 調試器 385

第19章 用戶空間的驅動程式 386

19.1 進程調度和回響時間 387

19.1.1 原先的調度器 387

19.1.2 o(1)調度器 387

19.1.3 cfs 388

19.1.4 回響時間 388

19.2 訪問i/o區域 390

19.3 訪問記憶體區域 393

19.4 用戶模式scsi 395

19.5 用戶模式usb 397

19.6 用戶模式i2c 400

19.7 uio 401

19.8 查看原始碼 402

第20章 其他設備和驅動程式 403

20.1 ecc報告 403

20.2 頻率調整 407

20.3 嵌入式控制器 408

20.4 acpi 408

20.5 isa與mca 410

20.6 火線 410

20.7 智慧型輸入/輸出 411

20.8 業餘無線電 411

20.9 voip 411

20.10 高速互聯 412

20.10.1 infiniband 413

20.10.2 rapidio 413

20.10.3 光纖通道 413

20.10.4 iscsi 413

第21章 調試設備驅動程式 414

21.1 kdb 414

21.1.1 進入調試器 415

21.1.2 kdb 415

21.1.3 kgdb 417

21.1.4 gdb 420

21.1.5 jtag調試器 421

21.1.6 下載 423

21.2 核心探測器 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協同工作 432

21.3.3 kdump 433

21.3.4 查看原始碼 437

21.4 性能剖析 437

21.4.1 利用oprofile剖析核心性能 438

21.4.2 利用gprof剖析應用程式性能 440

21.5 跟蹤 441

21.6 ltp 444

21.7 uml 444

21.8 診斷工具 444

21.9 核心修改配置選項 444

21.10 測試設備 445

第22章 維護與發布 446

22.1 代碼風格 446

22.2 修改標記 446

22.3 版本控制 447

22.4 一致性檢查 447

22.5 構建腳本 448

22.6 可移植代碼 450

第23章 結束語 451

23.1 流程一覽表 451

23.2 下一步該做什麼 452

附錄a linux彙編 453

附錄b linux與bios 457

附錄c seq檔案 461

相關詞條

相關搜尋

熱門詞條

聯絡我們