Essential Linux Device Drivers (Hardcover)
暫譯: 必備的 Linux 設備驅動程式 (精裝版)
Sreekrishnan Venkateswaran
- 出版商: Prentice Hall
- 出版日期: 2008-04-01
- 售價: $2,230
- 貴賓價: 9.5 折 $2,119
- 語言: 英文
- 頁數: 752
- 裝訂: Hardcover
- ISBN: 0132396556
- ISBN-13: 9780132396554
-
相關分類:
Linux
-
相關翻譯:
精通 Linux 設備驅動程序開發 (Essential Linux Device Drivers) (簡中版)
買這商品的人也買了...
-
$880$695 -
$880$695 -
$2,288Understanding the Linux Kernel, 3/e (Paperback)
-
$550$435 -
$980$774 -
$990$891 -
$600$480 -
$720$569 -
$2,400$2,280 -
$1,180$932 -
$620$527 -
$980$774 -
$680$530 -
$450$351 -
$490$417 -
$580$458 -
$620$527 -
$480$374 -
$490$417 -
$960$758 -
$780$616 -
$780$616 -
$690$587 -
$750$638 -
$750$638
商品描述
Description
“Probably the most wide ranging and complete Linux device driver book I’ve read.”
--Alan Cox, Linux Guru and Key Kernel Developer
“Very comprehensive and detailed, covering almost every single Linux device driver type.”
--Theodore Ts’o, First Linux Kernel Developer in North America and Chief Platform Strategist of the Linux Foundation
The Most Practical Guide to Writing Linux Device Drivers
Linux now offers an exceptionally robust environment for driver development: with today’s kernels, what once required years of development time can be accomplished in days. In this practical, example-driven book, one of the world’s most experienced Linux driver developers systematically demonstrates how to develop reliable Linux drivers for virtually any device. Essential Linux Device Drivers is for any programmer with a working knowledge of operating systems and C, including programmers who have never written drivers before. Sreekrishnan Venkateswaran focuses on the essentials, bringing together all the concepts and techniques you need, while avoiding topics that only matter in highly specialized situations. Venkateswaran begins by reviewing the Linux 2.6 kernel capabilities that are most relevant to driver developers. He introduces simple device classes; then turns to serial buses such as I2C and SPI; external buses such as PCMCIA, PCI, and USB; video, audio, block, network, and wireless device drivers; user-space drivers; and drivers for embedded Linux–one of today’s fastest growing areas of Linux development. For each, Venkateswaran explains the technology, inspects relevant kernel source files, and walks through developing a complete example.
• Addresses drivers discussed in no other book, including drivers for I2C, video, sound, PCMCIA, and different types of flash memory
• Demystifies essential kernel services and facilities, including kernel threads and helper interfaces
• Teaches polling, asynchronous notification, and I/O control
• Introduces the Inter-Integrated Circuit Protocol for embedded Linux drivers
• Covers multimedia device drivers using the Linux-Video subsystem and Linux-Audio framework
• Shows how Linux implements support for wireless technologies such as Bluetooth, Infrared, WiFi, and cellular networking
• Describes the entire driver development lifecycle, through debugging and maintenance
• Includes reference appendixes covering Linux assembly, BIOS calls, and Seq files
Table of Contents
Foreword xxi
Preface xxiii
Acknowledgments xxix
About the Author xxx
Chapter 1 Introduction 1
Evolution 2
The GNU Copyleft 3
Kernelorg 4
Mailing Lists and Forums 4
Linux Distributions 5
Looking at the Sources 6
Building the Kernel 10
Loadable Modules 12
Before Starting 14
Chapter 2 A Peek Inside the Kernel 17
Booting Up 18
Kernel Mode and User Mode 30
Process Context and Interrupt Context 30
Kernel Timers 31
HZ and Jiffies 31
Long Delays 33
Short Delays 36
Pentium Time Stamp Counter 36
Real Time Clock 37
Concurrency in the Kernel 39
Spinlocks and Mutexes 39
Atomic Operators 45
Reader-Writer Locks 46
Debugging 48
Process Filesystem 49
Allocating Memory 49
Looking at the Sources 52
Chapter 3 Kernel Facilities 55
Kernel Threads 56
Creating a Kernel Thread 56
Process States and Wait Queues 61
User Mode Helpers 63
Helper Interfaces 65
Linked Lists 65
Hash Lists 72
Work Queues 72
Notifier Chains 74
Completion Interface 78
Kthread Helpers 81
Error-Handling Aids 83
Looking at the Sources 85
Chapter 4 Laying the Groundwork 89
Introducing Devices and Drivers 90
Interrupt Handling 92
Interrupt Context 92
Assigning IRQs 94
Device Example: Roller Wheel 94
Softirqs and Tasklets 99
The Linux Device Model 103
Udev 103
Sysfs, Kobjects, and Device Classes 106
Hotplug and Coldplug 110
Microcode Download 111
Module Autoload 112
Memory Barriers 114
Power Management 114
Looking at the Sources 115
Chapter 5 Character Drivers 119
Char Driver Basics 120
Device Example: System CMOS 121
Driver Initialization 122
Open and Release 127
Exchanging Data 129
Seek 136
Control 137
Sensing Data Availability 139
Poll 139
Fasync 142
Talking to the Parallel Port 145
Device Example: Parallel Port LED Board 146
RTC Subsystem 156
Pseudo Char Drivers 157
Misc Drivers 160
Device Example: Watchdog Timer 160
Character Caveats 166
Looking at the Sources 167
6556_Bookindb i6556_ix 3/4/08 9:31:21 AM
Chapter 6 Serial Drivers 171
Layered Architecture 173
UART Drivers 176
Device Example: Cell Phone 178
RS-485 191
TTY Drivers 192
Line Disciplines 194
Device Example: Touch Controller 195
Looking at the Sources 205
Chapter 7 Input Drivers 207
Input Event Drivers 210
The Evdev Interface 210
Input Device Drivers 216
Serio 217
Keyboards 217
Mice 220
Touch Controllers 227
Accelerometers 228
Output Events 228
Debugging 230
Looking at the Sources 231
Chapter 8 The Inter-Integrated Circuit Protocol 233
What’s I2C/SMBus? 234
I2C Core 235
Bus Transactions 237
Device Example: EEPROM 238
Initializing 238
Probing the Device 241
Checking Adapter Capabilities 244
Accessing the Device 244
More Methods 246
Device Example: Real Time Clock 247
I2C-dev 251
Hardware Monitoring Using LM-Sensors 251
The Serial Peripheral Interface Bus 251
The 1-Wire Bus 254
Debugging 254
Looking at the Sources 255
Chapter 9 PCMCIA and Compact Flash 257
What’s PCMCIA/CF? 258
Linux-PCMCIA Subsystem 260
Host Controller Drivers 262
PCMCIA Core 263
Driver Services 263
Client Drivers 264
Data Structures 264
Device Example: PCMCIA Card 267
Tying the Pieces Together 271
PCMCIA Storage 272
Serial PCMCIA 272
Debugging 273
Looking at the Sources 275
Chapter 10 Peripheral Component Interconnect 277
The PCI Family 278
Addressing and Identification 281
Accessing PCI Regions 285
Configuration Space 285
I/O and Memory 286
Direct Memory Access 288
Device Example: Ethernet-Modem Card 292
Initializing and Probing 293
Data Transfer 301
Debugging 308
Looking at the Sources 308
Chapter 11 Universal Serial Bus 311
USB Architecture 312
Bus Speeds 314
Host Controllers 315
Transfer Types 315
Addressing 316
Linux-USB Subsystem 317
Driver Data Structures 317
The usb_device Structure 318
USB Request Blocks 319
Pipes 321
Descriptor Structures 322
Enumeration 324
Device Example: Telemetry Card 324
Initializing and Probing 325
Accessing Registers 332
Data Transfer 335
Class Drivers 338
Mass Storage 339
USB-Serial 345
Human Interface Devices 348
Bluetooth 348
Gadget Drivers 348
Debugging 349
Looking at the Sources 351
Chapter 12 Video Drivers 355
Display Architecture 356
Linux-Video Subsystem 359
Display Parameters 361
The Frame Buffer API 362
Frame Buffer Drivers 365
Device Example: Navigation System 365
Console Drivers 380
Device Example: Cell Phone Revisited 382
Boot Logo 387
Debugging 387
Looking at the Sources 388
Chapter 13 Audio Drivers 391
Audio Architecture 392
Linux-Sound Subsystem 394
Device Example: MP3 Player 396
Driver Methods and Structures 399
ALSA Programming 409
Debugging 412
Looking at the Sources 412
Chapter 14 Block Drivers 415
Storage Technologies 416
Linux Block I/O Layer 421
I/O Schedulers 422
Block Driver Data Structures and Methods 423
Device Example: Simple Storage Controller 426
Initialization 427
Block Device Operations 430
Disk Access 432
Advanced Topics 434
Debugging 436
Looking at the Sources 437
Chapter 15 Network Interface Cards 439
Driver Data Structures 440
Socket Buffers 441
The Net Device Interface 443
Activation 444
Data Transfer 444
Watchdog 445
Statistics 445
Configuration 446
Bus Specific 448
Talking with Protocol Layers 448
Receive Path 448
Transmit Path 449
Flow Control 449
Buffer Management and Concurrency Control 450
Device Example: Ethernet NIC 451
ISA Network Drivers 457
Asynchronous Transfer Mode 458
Network Throughput 459
Driver Performance 459
Protocol Performance 461
Looking at the Sources 461
Chapter 16 Linux Without Wires 465
Bluetooth 467
BlueZ 469
Device Example: CF Card 471
Device Example: USB Adapter 471
RFCOMM 473
Networking 475
Human Interface Devices 477
Audio 477
Debugging 478
Looking at the Sources 478
Infrared 478
Linux-IrDA 480
Device Example: Super I/O Chip 482
Device Example: IR Dongle 483
IrComm 486
Networking 486
IrDA Sockets 487
Linux Infrared Remote Control 488
Looking at the Sources 489
WiFi 489
Configuration 490
Device Drivers 494
Looking at the Sources 496
Cellular Networking 496
GPRS 496
CDMA 498
Current Trends 500
Chapter 17 Memory Technology Devices 503
What’s Flash Memory? 504
Linux-MTD Subsystem 505
Map Drivers 506
Device Example: Handheld 506
NOR Chip Drivers 511
NAND Chip Drivers 513
User Modules 516
Block Device Emulation 516
Char Device Emulation 517
JFFS2 517
YAFFS2 518
MTD-Utils 518
Configuring MTD 519
eXecute In Place 520
The Firmware Hub 520
Debugging 524
Looking at the Sources 524
Chapter 18 Embedding Linux 527
Challenges 528
Component Selection 530
Tool Chains 531
Embedded Bootloaders 531
Memory Layout 535
Kernel Porting 537
Embedded Drivers 538
Flash Memory 538
UART 539
Buttons and Wheels 539
PCMCIA/CF 540
SD/MMC 540
USB 540
RTC 541
Audio 541
Touch Screen 541
Video 541
CPLD/FPGA 542
Connectivity 542
Domain-Specific Electronics 542
More Drivers 543
The Root Filesystem 544
NFS-Mounted Root 544
Compact Middleware 546
Test Infrastructure 548
Debugging 548
Board Rework 549
Debuggers 550
Chapter 19 Drivers in User Space 551
Process Scheduling and Response Times 553
The Original Scheduler 553
The O(1) Scheduler 553
The CFS Scheduler 555
Response Times 555
Accessing I/O Regions 558
Accessing Memory Regions 562
User Mode SCSI 565
User Mode USB 567
User Mode I2C 571
UIO 573
Looking at the Sources 574
Chapter 20 More Devices and Drivers 577
ECC Reporting 578
Device Example: ECC-Aware Memory Controller 579
Frequency Scaling 583
Embedded Controllers 584
ACPI 585
ISA and MCA 587
FireWire 588
Intelligent Input/Output 589
Amateur Radio 590
Voice over IP 590
High-Speed Interconnects 591
InfiniBand 592
RapidIO 592
Fibre Channel 592
iSCSI 593
Chapter 21 Debugging Device Drivers 595
Kernel Debuggers 596
Entering a Debugger 597
Kernel Debugger (kdb) 598
Kernel GNU Debugger (kgdb) 600
GNU Debugger (gdb) 604
JTAG Debuggers 605
Downloads 609
Kernel Probes 609
Kprobes 609
Jprobes 614
Return Probes 617
Limitations 619
Looking at the Sources 620
Kexec and Kdump 620
Kexec 620
Kexec with Kdump 621
Kdump 622
Looking at the Sources 629
Profiling 629
Kernel Profiling with OProfile 629
Application Profiling with Gprof 633
Tracing 634
Linux Trace Toolkit 634
Linux Test Project 638
User Mode Linux 638
Diagnostic Tools 638
Kernel Hacking Config Options 639
Test Equipment 640
Chapter 22 Maintenance and Delivery 641
Coding Style 642
Change Markers 642
Version Control 643
Consistent Checksums 643
Build Scripts 645
Portable Code 647
Chapter 23 Shutting Down 649
Checklist 650
What Next? 651
Appendix A Linux Assembly 653
Debugging 659
Appendix B Linux and the BIOS 661
Real Mode Calls 662
Protected Mode Calls 665
BIOS and Legacy Drivers 666
Appendix C Seq Files 669
The Seq File Advantage 670
Updating the NVRAM Driver 677
Looking at the Sources 679
Index 681
商品描述(中文翻譯)
描述
「這可能是我讀過的最全面且完整的 Linux 裝置驅動程式書籍。」
-- Alan Cox,Linux 專家及主要核心開發者
「非常全面且詳細,涵蓋幾乎所有的 Linux 裝置驅動程式類型。」
-- Theodore Ts’o,北美第一位 Linux 核心開發者及 Linux 基金會首席平台策略師
最實用的 Linux 裝置驅動程式撰寫指南
Linux 現在提供了一個極其穩健的驅動程式開發環境:在當今的核心下,曾經需要數年開發時間的工作現在可以在幾天內完成。在這本實用且以範例為主的書中,全球最有經驗的 Linux 驅動程式開發者之一系統性地展示了如何為幾乎任何裝置開發可靠的 Linux 驅動程式。《Essential Linux Device Drivers》適合任何對作業系統和 C 有基本了解的程式設計師,包括從未撰寫過驅動程式的程式設計師。Sreekrishnan Venkateswaran 專注於基本概念,整合了您所需的所有概念和技術,同時避免僅在高度專業的情況下才重要的主題。Venkateswaran 首先回顧了與驅動程式開發者最相關的 Linux 2.6 核心功能。他介紹了簡單的裝置類別;然後轉向 I2C 和 SPI 等串列匯流排;PCMCIA、PCI 和 USB 等外部匯流排;視頻、音頻、區塊、網路和無線裝置驅動程式;用戶空間驅動程式;以及嵌入式 Linux 的驅動程式——這是當今 Linux 開發中增長最快的領域之一。對於每一個主題,Venkateswaran 解釋了技術,檢查相關的核心源代碼,並逐步開發完整的範例。
• 涉及其他書籍未討論的驅動程式,包括 I2C、視頻、音頻、PCMCIA 和不同類型的快閃記憶體驅動程式
• 解釋基本的核心服務和設施,包括核心執行緒和輔助介面
• 教授輪詢、非同步通知和 I/O 控制
• 介紹嵌入式 Linux 驅動程式的互聯集成電路協議
• 涵蓋使用 Linux-Video 子系統和 Linux-Audio 框架的多媒體裝置驅動程式
• 展示 Linux 如何實現對無線技術的支持,如 Bluetooth、紅外線、WiFi 和行動網路
• 描述整個驅動程式開發生命週期,包括除錯和維護
• 包含涵蓋 Linux 組合語言、BIOS 調用和 Seq 檔案的參考附錄
目錄
前言 xxi
序言 xxiii
致謝 xxix
關於作者 xxx
第一章 介紹 1
演變 2
GNU Copyleft 3
Kernelorg 4
郵件列表和論壇 4
Linux 發行版 5
查看源代碼 6
構建核心 10
可加載模組 12
開始之前 14
第二章 核心內部一瞥 17
啟動 18
核心模式和用戶模式 30
進程上下文和中斷上下文 30
核心計時器 31
HZ 和 Jiffies 31
長延遲 33
短延遲 36
Pentium 時間戳計數器 36
實時時鐘 37
核心中的並發性 39
自旋鎖和互斥鎖 39
原子運算子 45
讀寫鎖 46
除錯 48
進程檔案系統 49
分配記憶體 49
查看源代碼 52
第三章 核心設施 55
核心執行緒 56
創建核心執行緒 56
進程狀態和等待隊列 61
用戶模式輔助程式 63
輔助介面 65
鏈表 65
哈希列表 72
工作隊列 72
通知鏈 74
完成介面 78
Kthread 輔助程式 81
錯誤處理輔助程式 83
查看源代碼 85
第四章 打下基礎 89
介紹裝置和驅動程式 90
中斷處理 92
中斷上下文 92
分配 IRQ 94
裝置範例:滾輪 94
Softirqs 和 Tasklets 99
Linux 裝置模型 103
Udev 103
Sysfs、Kobjects 和裝置類別 106
熱插拔和冷插拔 110
微碼下載 111
模組自動加載 112
記憶體屏障 114
電源管理 114
查看源代碼 115
第五章 字元驅動程式 119
字元驅動程式基礎 120
裝置範例:系統 CMOS 121
驅動程式初始化 122
開啟和釋放 127
數據交換 129
尋址 136
控制 137
感知數據可用性 139
輪詢 139
Fasync 142
與平行埠通信 145
裝置範例:平行埠 LED 板 146
RTC 子系統 156
偽字元驅動程式 157
雜項驅動程式 160
裝置範例:看門狗計時器 160
字元注意事項 166
查看源代碼 167