基本信息·出版社:人民邮电出版社 ·页码:714 页 ·出版日期:2009年06月 ·ISBN:7115206473/9787115206473 ·条形码:9787115206473 ·版本:第1版 · ...
商家名称 |
信用等级 |
购买信息 |
订购本书 |
|
|
精通Linux驱动程序开发(英文版) |
|
|
|
精通Linux驱动程序开发(英文版) |
|
基本信息·出版社:人民邮电出版社
·页码:714 页
·出版日期:2009年06月
·ISBN:7115206473/9787115206473
·条形码:9787115206473
·版本:第1版
·装帧:平装
·开本:16
·正文语种:英语
·丛书名:图灵程序设计丛书
内容简介 《精通Linux驱动程序开发(英文版)》是Linux设备驱动程序领域的权威著作。全书基于2.6内核,不仅透彻讲解了基本概念和技术,更深入探讨了其他书没有涵盖或辄止浅尝的许多重要主题和关键难点,如PCMCIA、I2C和USB等外部总线、视频、音频、无线连网和闪存等技术。在解释每一个技术时,均讲解了相关的内核源码文件,并给出了完整的开发实例。《精通Linux驱动程序开发(英文版)》适合中高级Linux 开发人员阅读。
作者简介 Sreekrishnan Venkateswaran,世界顶级Linux开发技术专家。在IBM工作多年,有丰富的嵌入式Linux和驱动程序开发经验,曾经将Linux移植到了手表、音乐播放器、VoIP电话、心脏起搏器以及远程门诊监控系统等各种设备上。目前负责IBM印度公司的嵌入式解决方案组。他曾担任Linux Magazine的特邀编辑,主持内核技术专栏作。
媒体推荐 目前最全面深入的Linux设备驱动程序著作,世界级Linux技术大师力作,大量技术内幕首次公开。
“这是我读过的最全面的Linux设备驱动程序著作。”
——Alan Cox,Linux内核维护者
“这本书涵盖了各种Linux设备驱动程序,全面而翔实。”
——Theodore Ts’o,Linux基金会CTO,北美第一位内核开发者
编辑推荐 在回顾了驱动开发的各种基础知识和最新的Linux 2.6内核相关特性之后,《精通Linux驱动程序开发(英文版)》的作者不仅讲述了其他设备驱动程序图书中都会涉及的较容易的内容,更迎难而上,深入探讨了驱动开发包括嵌入式Linux开发中必须面对的难点,比如PCMCIA、USB、I2C、视频、音频、闪存、无线通信等,揭示了许多内幕技术的秘密。对每种驱动程序,书中在剖析关键技术之外,还带你查看相关的内核源代码,提供完整的实例。时至今日,Linux操作系统以其跨平台、开源、支持众多应用软件和网络协议等优点,已经成为应用最广泛的开发平台。在这部贴近实战、实例丰富的著作中,世界上经验最丰富的Linux驱动程序开发者之一系统全面地阐述了如何为各种设备开发可靠的驱动程序。
目录 Chapter 1 Introduction 1
Evolution 2
The GNU Copyleft 3
Kernel.org 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
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
……
序言 20世纪90年代末,我们IBM的一群同事进行了一项将Linux内核移植到一种智能手表上的工作。目标设备虽然微不足道,但是移植Linux的任务却相当艰巨。在当时,内核中还不存在MTD(MemoryTechnologyDevice,内存技术设备)子系统,这意味着在文件系统能够运行在这种手表的闪存之前,我们不得不从头开发必要的存储驱动器。由于当时内核的输入事件驱动接口尚未诞生,因此手表的触摸屏与用户应用程序的接口非常复杂。让XWindows运行在手表的LCD上十分困难,因为XWindows和帧缓冲设备驱动程序搭配得并不好。如果你戴着一块防水的Linux智能手表,却不能躺在浴缸里实时获得股票行情,那么这块手表还有什么用?Linux几年前就已集成了蓝牙技术,而当时我们却花费了数月的时间将一种专有的蓝牙协议栈移植到手表上,从而使得这种手表具备了Internet连网能力。电源管理系统可以让这种手表的电池多运行几个小时,因此我们又设计了一个省电方案。那时候,Linux红外项目Linux-Infrared还不稳定,我们十分小心地用红外协议栈,设计出使用红外键盘作为手表的数据输入设备。最后,由于当时还没有能应用于消费类电子产品的成型的编译器发行版,我们也不得不编译出编译器,并交叉编译出一个紧凑的应用程序集。
时光飞逝,当年嗷嗷待哺的企鹅宝宝已经成长为一名健壮的少年。过去我们编写了成千上万行代码并耗时一年完成的任务,若采用现在的内核,只需要几天的时间就可以完成。但是,要成为一名能巧妙地解决多种问题的高级内核工程师,你需要理解今天的Linux内核提供的各种功能和设施。
关于本书
在Linux内核源代码树提供的各个子系统中,drivers/目录是其中最大的一个分支,它比其他子系统大数倍。随着各种新技术的广泛应用,内核中新的设备驱动程序的开发工作正在稳步加速。最新的Linux内核支持多达70余种设备驱动程序的庞大家族。
本书主要讲解Linux设备驱动程序,介绍了目前内核所支持的主要设备类型的设计与开发,其中包括当年我在开发Linux-on-Watch项目时未遇到的设备。本书在讲解每种设备驱动程序家族的时候,先介绍与该驱动程序相关的技术,接着给出一个实际的开发例子,最后列出相关的内核源代码文件。在踏入Linux设备驱动程序领域之前,本书先介绍了内核以及Linux2.6的重要特性,重点讲解了设备驱动程序编写者感兴趣的内核知识。
文摘 插图:
Linux has trekked many a terrain and is now state of the art, so you can use it as avehicle to understand operating system concepts, processor architectures, and evenindustry domains. When you learn a technique used by a device driver subsystem,look one level deeper and probe the underlying reasons behind that design choice. Wherever not explicitly stated, the text assumes the 32-bit x86 architecture. Thebook is, however, mindful of the fact that you are more likely to write device driversfor embedded devices than for conventional PC-compatible systems. The chapter onserial drivers, for example, examines two devices: a touch controller on a PC deriva-tive and a UART on a cell phone. or the chapter on I2C device drivers looks at anEEPROM on a PC system and a Real Time Clock on an embedded device. The bookalso teaches you about the core infrastructure that the kernel provides for most driverclasses, which hides architecture dependencies from device drivers. Device driver debugging techniques are discussed near the end of the book inChapter 21, so you might find it worthwhile to forward to that chapter as you developdrivers while reading the book. This book is based on the 2.6 kernel, which has substantial changes across the boardfrom 2.4, touching all major subsystems. Hopefully, you have installed a 2.6,basedLinux on your system by now and started experimenting with the kernel sources. Eachchapter takes the liberty, of profusely pointing you to relevant kernel source files fortwo main reasons: