| help | account  


Linux Device Drivers, 3rd Edition
View Larger Image
Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
O'Reilly Media, Paperback, 3rd edition, Published February 2005, 613 pages, ISBN 0596005903
List Price: $39.95
Our Price: $25.50
You Save: $14.45 (36% Off)


FREE Shipping on Orders over $40!*
Availability: In-Stock

Be the First to Write a Review and tell the world about this title!

People who purchase this book frequently purchase:

Books on similar topics, in best-seller order:Books from the same publisher, in best-seller order:

Device drivers literally drive everything you're interested in--disks, monitors, keyboards, modems--everything outside the computer chip and memory. And writing device drivers is one of the few areas of programming for the Linux operating system that calls for unique, Linux-specific knowledge. For years now, programmers have relied on the classic Linux Device Drivers from O'Reilly to master this critical subject. Now in its third edition, this bestselling guide provides all the information you'll need to write drivers for a wide range of devices.
  • Over the years the book has helped countless programmers learn:
  • how to support computer peripherals under the Linux operating system
  • how to develop and write software for new hardware under Linux
  • the basics of Linux operation even if they are not expecting to write a driver

The new edition of Linux Device Drivers is better than ever. The book covers all the significant changes to Version 2.6 of the Linux kernel, which simplifies many activities, and contains subtle new features that can make a driver both more efficient and more flexible. Readers will find new chapters on important types of drivers not covered previously, such as consoles, USB drivers, and more.

Best of all, you don't have to be a kernel hacker to understand and enjoy this book. All you need is an understanding of the C programming language and some background in Unix system calls. And for maximum ease-of-use, the book uses full-featured examples that you can compile and run without special hardware.

Today Linux holds fast as the most rapidly growing segment of the computer market and continues to win over enthusiastic adherents in many application areas. With this increasing support, Linux is now absolutely mainstream, and viewed as a solid platform for embedded systems. If you're writing device drivers, you'll want this book. In fact, you'll wonder how drivers are ever written without it.

Table of Contents

Preface

1. An Introduction to Device Drivers

The Role of the Device Driver
Splitting the Kernel
Classes of Devices and Modules
Security Issues
Version Numbering
License Terms
Joining the Kernel Development Community
Overview of the Book

2. Building and Running Modules

Setting Up Your Test System
The Hello World Module
Kernel Modules Versus Applications
Compiling and Loading
The Kernel Symbol Table
Preliminaries
Initialization and Shutdown
Module Parameters
Doing It in User Space
Quick Reference

3. Char Drivers

The Design of scull
Major and Minor Numbers
Some Important Data Structures
Char Device Registration
open and release
scull's Memory Usage
read and write
Playing with the New Devices
Quick Reference

4. Debugging Techniques

Debugging Support in the Kernel
Debugging by Printing
Debugging by Querying
Debugging by Watching
Debugging System Faults
Debuggers and Related Tools

5. Concurrency and Race Conditions

Pitfalls in scull
Concurrency and Its Management
Semaphores and Mutexes
Completions
Spinlocks
Locking Traps
Alternatives to Locking
Quick Reference

6. Advanced Char Driver Operations

ioctl
Blocking I/O
poll and select
Asynchronous Notification
Seeking a Device
Access Control on a Device File
Quick Reference

7. Time, Delays, and Deferred Work

Measuring Time Lapses
Knowing the Current Time
Delaying Execution
Kernel Timers
Tasklets
Workqueues
Quick Reference

8. Allocating Memory

The Real Story of kmalloc
Lookaside Caches
get_free_page and Friends
vmalloc and Friends
Per-CPU Variables
Obtaining Large Buffers
Quick Reference

9. Communicating with Hardware

I/O Ports and I/O Memory
Using I/O Ports
An I/O Port Example
Using I/O Memory
Quick Reference

10. Interrupt Handling

Preparing the Parallel Port
Installing an Interrupt Handler
Implementing a Handler
Top and Bottom Halves
Interrupt Sharing
Interrupt-Driven I/O
Quick Reference

11. Data Types in the Kernel

Use of Standard C Types
Assigning an Explicit Size to Data Items
Interface-Specific Types
Other Portability Issues
Linked Lists
Quick Reference

12. PCI Drivers

The PCI Interface
A Look Back: ISA
PC/104 and PC/104+
Other PC Buses
SBus
NuBus
External Buses
Quick Reference

13. USB Drivers

USB Device Basics
USB and Sysfs
USB Urbs
Writing a USB Driver
USB Transfers Without Urbs
Quick Reference

14. The Linux Device Model

Kobjects, Ksets, and Subsystems
Low-Level Sysfs Operations
Hotplug Event Generation
Buses, Devices, and Drivers
Classes
Putting It All Together
Hotplug
Dealing with Firmware
Quick Reference

15. Memory Mapping and DMA

Memory Management in Linux
The mmap Device Operation
Performing Direct I/O
Direct Memory Access
Quick Reference

16. Block Drivers

Registration
The Block Device Operations
Request Processing
Some Other Details
Quick Reference

17. Network Drivers

How snull Is Designed
Connecting to the Kernel
The net_device Structure in Detail
Opening and Closing
Packet Transmission
Packet Reception
The Interrupt Handler
Receive Interrupt Mitigation
Changes in Link State
The Socket Buffers
MAC Address Resolution
Custom ioctl Commands
Statistical Information
Multicast
A Few Other Details
Quick Reference

18. TTY Drivers

A Small TTY Driver
tty_driver Function Pointers
TTY Line Settings
ioctls
proc and sysfs Handling of TTY Devices
The tty_driver Structure in Detail
The tty_operations Structure in Detail
The tty_struct Structure in Detail
Quick Reference

Bibliography

Index

About the Authors

Jonathan Corbet got his first look at the BSD Unix source back in 1981, when an instructor at the University of Colorado let him "fix" the paging algorithm. He has been digging around inside every system he could get his hands on ever since, working on drivers for VAX, Sun, Ardent, and x86 systems on the way. He got his first Linux system in 1993, and has never looked back. Mr. Corbet is currently the co-founder and executive editor of Linux Weekly News; he lives in Boulder, Colorado with his wife and two children.

Alessandro Rubini installed Linux 0.99.14 soon after getting his degree as electronic engineer. He then received a Ph.D. in computer science at the University of Pavia despite his aversion toward modern technology. He left the University after getting his Ph.D. because he didn't want to write articles. He now works as a free lance writing device drivers and, um...articles. He used to be a young hacker before his babies were born; he's now an old advocate of Free Software who developed a bias for non-PC computer platforms.

Greg Kroah-Hartman has been writing Linux kernel drivers since 1999, and is currently the maintainer for the USB, PCI, I2C, driver core, and sysfs kernel subsystems. He is also the maintainer of the udev and hotplug userspace programs, as well as being a Gentoo kernel maintainer, ensuring that his email inbox is never empty. He is a contributing editor to Linux Journal Magazine, and works for IBM's Linux Technology Center, doing various Linux kernel related tasks.


Forgot your password?
FAQs
Shipping Options
Returns
Your Orders
Your Account