Atjaunināt sīkdatņu piekrišanu

Essential Linux Device Drivers [Hardback]

3.73/5 (94 ratings by Goodreads)
  • Formāts: Hardback, 752 pages, height x width x depth: 241x184x42 mm, weight: 1290 g
  • Izdošanas datums: 03-Apr-2008
  • Izdevniecība: Prentice Hall
  • ISBN-10: 0132396556
  • ISBN-13: 9780132396554
Citas grāmatas par šo tēmu:
  • Formāts: Hardback, 752 pages, height x width x depth: 241x184x42 mm, weight: 1290 g
  • Izdošanas datums: 03-Apr-2008
  • Izdevniecība: Prentice Hall
  • ISBN-10: 0132396556
  • ISBN-13: 9780132396554
Citas grāmatas par šo tēmu:
Probably the most wide ranging and complete Linux device driver book Ive read.

--Alan Cox, Linux Guru and Key Kernel Developer

 

Very comprehensive and detailed, covering almost every single Linux device driver type.

--Theodore Tso, 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 todays kernels, what once required years of development time can be accomplished in days. In this practical, example-driven book, one of the worlds 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 Linuxone of todays 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

Papildus informācija

Probably the most wide ranging and complete Linux device driver book Ive read.

--Alan Cox, Linux Guru and Key Kernel Developer

 

Very comprehensive and detailed, covering almost every single Linux device driver type.

--Theodore Tso, 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 todays kernels, what once required years of development time can be accomplished in days. In this practical, example-driven book, one of the worlds 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 Linuxone of todays 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
Foreword xxi
Preface xxiii
Acknowledgments xxix
About the Author xxx
Introduction
1(16)
Evolution
2(1)
The GNU Copyleft
3(1)
Kernel.org
4(1)
Mailing Lists and Forums
4(1)
Linux Distributions
5(1)
Looking at the Sources
6(4)
Building the Kernel
10(2)
Loadable Modules
12(2)
Before Starting
14(3)
A Peek Inside the Kernel
17(38)
Booting Up
18(12)
Kernel Mode and User Mode
30(1)
Process Context and Interrupt Context
30(1)
Kernel Timers
31(8)
HZ and Jiffies
31(2)
Long Delays
33(3)
Short Delays
36(1)
Pentium Time Stamp Counter
36(1)
Real Time Clock
37(2)
Concurrency in the Kernel
39(10)
Spinlocks and Mutexes
39(6)
Atomic Operators
45(1)
Reader-Writer Locks
46(2)
Debugging
48(1)
Process Filesystem
49(1)
Allocating Memory
49(3)
Looking at the Sources
52(3)
Kernel Facilities
55(34)
Kernel Threads
56(9)
Creating a Kernel Thread
56(5)
Process States and Wait Queues
61(2)
User Mode Helpers
63(2)
Helper Interfaces
65(20)
Linked Lists
65(7)
Hash Lists
72(1)
Work Queues
72(2)
Notifier Chains
74(4)
Completion Interface
78(3)
Kthread Helpers
81(2)
Error-Handling Aids
83(2)
Looking at the Sources
85(4)
Laying the Groundwork
89(30)
Introducing Devices and Drivers
90(2)
Interrupt Handling
92(11)
Interrupt Context
92(2)
Assigning IRQs
94(1)
Device Example: Roller Wheel
94(5)
Softirqs and Tasklets
99(4)
The Linux Device Model
103(11)
Udev
103(3)
Sysfs, Kobjects, and Device Classes
106(4)
Hotplug and Coldplug
110(1)
Microcode Download
111(1)
Module Autoload
112(2)
Memory Barriers
114(1)
Power Management
114(1)
Looking at the Sources
115(4)
Character Drivers
119(52)
Char Driver Basics
120(1)
Device Example: System CMOS
121(18)
Driver Initialization
122(5)
Open and Release
127(2)
Exchanging Data
129(7)
Seek
136(1)
Control
137(2)
Sensing Data Availability
139(6)
Poll
139(3)
Fasync
142(3)
Talking to the Parallel Port
145(11)
Device Example: Parallel Port LED Board
146(10)
RTC Subsystem
156(1)
Pseudo Char Drivers
157(3)
Misc Drivers
160(6)
Device Example: Watchdog Timer
160(6)
Character Caveats
166(1)
Looking at the Sources
167(4)
Serial Drivers
171(36)
Layered Architecture
173(3)
UART Drivers
176(16)
Device Example: Cell Phone
178(13)
RS-485
191(1)
TTY Drivers
192(2)
Line Disciplines
194(11)
Device Example: Touch Controller
195(10)
Looking at the Sources
205(2)
Input Drivers
207(26)
Input Event Drivers
210(6)
The Evdev Interface
210(6)
Input Device Drivers
216(14)
Serio
217(1)
Keyboards
217(3)
Mice
220(7)
Touch Controllers
227(1)
Accelerometers
228(1)
Output Events
228(2)
Debugging
230(1)
Looking at the Sources
231(2)
The Inter-Integrated Circuit Protocol
233(24)
What's I2C/SMBus?
234(1)
I2C Core
235(2)
Bus Transactions
237(1)
Device Example: EEPROM
238(9)
Initializing
238(3)
Probing the Device
241(3)
Checking Adapter Capabilities
244(1)
Accessing the Device
244(2)
More Methods
246(1)
Device Example: Real Time Clock
247(4)
I2C-dev
251(1)
Hardware Monitoring Using LM-Sensors
251(1)
The Serial Peripheral Interface Bus
251(3)
The 1-Wire Bus
254(1)
Debugging
254(1)
Looking at the Sources
255(2)
PCMCIA and Compact Flash
257(20)
What's PCMCIA/CF?
258(2)
Linux-PCMCIA Subsystem
260(2)
Host Controller Drivers
262(1)
PCMCIA Core
263(1)
Driver Services
263(1)
Client Drivers
264(7)
Data Structures
264(3)
Device Example: PCMCIA Card
267(4)
Tying the Pieces Together
271(1)
PCMCIA Storage
272(1)
Serial PCMCIA
272(1)
Debugging
273(2)
Looking at the Sources
275(2)
Peripheral Component Interconnect
277(34)
The PCI Family
278(3)
Addressing and Identification
281(4)
Accessing PCI Regions
285(3)
Configuration Space
285(1)
I/O and Memory
286(2)
Direct Memory Access
288(4)
Device Example: Ethernet-Modem Card
292(16)
Initializing and Probing
293(8)
Data Transfer
301(7)
Debugging
308(1)
Looking at the Sources
308(3)
Universal Serial Bus
311(44)
USB Architecture
312(5)
Bus Speeds
314(1)
Host Controllers
315(1)
Transfer Types
315(1)
Addressing
316(1)
Linux-USB Subsystem
317(1)
Driver Data Structures
317(7)
The usb_device Structure
318(1)
USB Request Blocks
319(2)
Pipes
321(1)
Descriptor Structures
322(2)
Enumeration
324(1)
Device Example: Telemetry Card
324(14)
Initializing and Probing
325(7)
Accessing Registers
332(3)
Data Transfer
335(3)
Class Drivers
338(10)
Mass Storage
339(6)
USB-Serial
345(3)
Human Interface Devices
348(1)
Bluetooth
348(1)
Gadget Drivers
348(1)
Debugging
349(2)
Looking at the Sources
351(4)
Video Drivers
355(36)
Display Architecture
356(3)
Linux-Video Subsystem
359(2)
Display Parameters
361(1)
The Frame Buffer API
362(3)
Frame Buffer Drivers
365(15)
Device Example: Navigation System
365(15)
Console Drivers
380(7)
Device Example: Cell Phone Revisited
382(5)
Boot Logo
387(1)
Debugging
387(1)
Looking at the Sources
388(3)
Audio Drivers
391(24)
Audio Architecture
392(2)
Linux-Sound Subsystem
394(2)
Device Example: MP3 Player
396(16)
Driver Methods and Structures
399(10)
ALSA Programming
409(3)
Debugging
412(1)
Looking at the Sources
412(3)
Block Drivers
415(24)
Storage Technologies
416(5)
Linux Block I/O Layer
421(1)
I/O Schedulers
422(1)
Block Driver Data Structures and Methods
423(3)
Device Example: Simple Storage Controller
426(8)
Initialization
427(3)
Block Device Operations
430(2)
Disk Access
432(2)
Advanced Topics
434(2)
Debugging
436(1)
Looking at the Sources
437(2)
Network Interface Cards
439(26)
Driver Data Structures
440(8)
Socket Buffers
441(2)
The .NET Device Interface
443(1)
Activation
444(1)
Data Transfer
444(1)
Watchdog
445(1)
Statistics
445(1)
Configuration
446(2)
Bus Specific
448(1)
Talking with Protocol Layers
448(2)
Receive Path
448(1)
Transmit Path
449(1)
Flow Control
449(1)
Buffer Management and Concurrency Control
450(1)
Device Example: Ethernet NIC
451(6)
ISA Network Drivers
457(1)
Asynchronous Transfer Mode
458(1)
Network Throughput
459(2)
Driver Performance
459(2)
Protocol Performance
461(1)
Looking at the Sources
461(4)
Linux Without Wires
465(38)
Bluetooth
467(11)
BlueZ
469(2)
Device Example: CF Card
471(1)
Device Example: USB Adapter
471(2)
RFCOMM
473(2)
Networking
475(2)
Human Interface Devices
477(1)
Audio
477(1)
Debugging
478(1)
Looking at the Sources
478(1)
Infrared
478(11)
Linux-IrDA
480(2)
Device Example: Super I/O Chip
482(1)
Device Example: IR Dongle
483(3)
IrComm
486(1)
Networking
486(1)
IrDA Sockets
487(1)
Linux Infrared Remote Control
488(1)
Looking at the Sources
489(1)
WiFi
489(7)
Configuration
490(4)
Device Drivers
494(2)
Looking at the Sources
496(1)
Cellular Networking
496(4)
GPRS
496(2)
CDMA
498(2)
Current Trends
500(3)
Memory Technology Devices
503(24)
What's Flash Memory?
504(1)
Linux-MTD Subsystem
505(1)
Map Drivers
506(5)
Device Example: Handheld
506(5)
NOR Chip Drivers
511(2)
NAND Chip Drivers
513(3)
User Modules
516(2)
Block Device Emulation
516(1)
Char Device Emulation
517(1)
JFFS2
517(1)
YAFFS2
518(1)
MTD-Utils
518(1)
Configuring MTD
519(1)
eXecute In Place
520(1)
The Firmware Hub
520(4)
Debugging
524(1)
Looking at the Sources
524(3)
Embedding Linux
527(24)
Challenges
528(2)
Component Selection
530(1)
Tool Chains
531(1)
Embedded Bootloaders
531(4)
Memory Layout
535(2)
Kernel Porting
537(1)
Embedded Drivers
538(6)
Flash Memory
538(1)
UART
539(1)
Buttons and Wheels
539(1)
PCMCIA/CF
540(1)
SD/MMC
540(1)
USB
540(1)
RTC
541(1)
Audio
541(1)
Touch Screen
541(1)
Video
541(1)
CPLD/FPGA
542(1)
Connectivity
542(1)
Domain-Specific Electronics
542(1)
More Drivers
543(1)
The Root Filesystem
544(4)
NFS-Mounted Root
544(2)
Compact Middleware
546(2)
Test Infrastructure
548(1)
Debugging
548(3)
Board Rework
549(1)
Debuggers
550(1)
Drivers in User Space
551(26)
Process Scheduling and Response Times
553(5)
The Original Scheduler
553(1)
The O(l) Scheduler
553(2)
The CFS Scheduler
555(1)
Response Times
555(3)
Accessing I/O Regions
558(4)
Accessing Memory Regions
562(3)
User Mode SCSI
565(2)
User Mode USB
567(4)
User Mode I2C
571(2)
UIO
573(1)
Looking at the Sources
574(3)
More Devices and Drivers
577(18)
ECC Reporting
578(5)
Device Example: ECC-Aware Memory Controller
579(4)
Frequency Scaling
583(1)
Embedded Controllers
584(1)
ACPI
585(2)
ISA and MCA
587(1)
FireWire
588(1)
Intelligent input/Output
589(2001)
Amateur Radio
2590(2000)
Voice over IP
590(1)
High-Speed Interconnects
591(4)
InfiniBand
592(1)
RapidIO
592(1)
Fibre Channel
592(1)
iSCSI
593(2)
Debugging Device Drivers
595(46)
Kernel Debuggers
596(13)
Entering a Debugger
597(1)
Kernel Debugger (kdb)
598(2)
Kernel GNU Debugger (kgdb)
600(4)
GNU Debugger (gdb)
604(1)
JTAG Debuggers
605(4)
Downloads
609(1)
Kernel Probes
609(11)
Kprobes
609(5)
Jprobes
614(3)
Return Probes
617(2)
Limitations
619(1)
Looking at the Sources
620(1)
Kexec and Kdump
620(9)
Kexec
620(1)
Kexec with Kdump
621(1)
Kdump
622(7)
Looking at the Sources
629(1)
Profiling
629(5)
Kernel Profiling with OProfile
629(4)
Application Profiling with Gprof
633(1)
Tracing
634(4)
Linux Trace Toolkit
634(4)
Linux Test Project
638(1)
User Mode Linux
638(1)
Diagnostic Tools
638(1)
Kernel Hacking Config Options
639(1)
Test Equipment
640(1)
Maintenance and Delivery
641(8)
Coding Style
642(1)
Change Markers
642(1)
Version Control
643(1)
Consistent Checksums
643(2)
Build Scripts
645(2)
Portable Code
647(2)
Shutting Down
649(4)
Checklist
650(1)
What Next?
651(2)
Appendix A Linux Assembly
653(8)
Debugging
659(2)
Appendix B Linux and the BIOS
661(8)
Real Mode Calls
662(3)
Protected Mode Calls
665(1)
BIOS and Legacy Drivers
666(3)
Appendix C Seq Files
669(12)
The Seq File Advantage
670(7)
Updating the NVRAM Driver
677(2)
Looking at the Sources
679(2)
Index 681
Sreekrishnan Venkateswaran has spent more than a decade working in IBM product development laboratories. He has ported Linux to devices ranging from wristwatches and music players to PDAs, VoIP phones, and even pacemaker programmers. He was a Contributing Editor and kernel columnist for Linux Magazine for more than two years.