精通Linux設備驅動程序開發( 簡體 字) | |
作者:[印]斯里克里斯漢·溫卡特斯瓦蘭(Sreekrishnan Venkateswaran) | 類別:1. -> 作業系統 -> Linux 2. -> 程式設計 -> 驅動程式 |
出版社:人民郵電出版社 | 3dWoo書號: 56213 詢問書籍請說出此書號! 缺書 NT售價: 500 元 |
出版日:2/1/2023 | |
頁數:468 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115402516 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 1章 引言 1
1.1 演進 1 1.2 GNU Copyleft 2 1.3 kernel.org 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 《精通Linux設備驅動程序開發》是Linux設備驅動程序開發領域的名作。全書基于2.6內核,不僅透徹講解了基本概念和技術,更深入探討了其他書沒有涵蓋或淺嘗輒止的許多重要主題和關鍵難點,如PCMCIA、I2C和USB等外部總線以及視頻、音頻、無線連網和閃存等驅動程序的開發,并講解了相關的內核源碼文件,給出了完整的開發實例。
《精通Linux設備驅動程序開發》適合中高 級Linux開發人員閱讀。 |