Essential Linux Device Drivers
Essential Linux Device Drivers
by Sreekrishnan Venkateswaran
by Sreekrishnan Venkateswaran
Publisher: Prentice Hall
Publisher: Prentice Hall
Pub Date: March 27, 2008
Pub Date: March 27, 2008
Print ISBN-10: 0-13-239655-6
Print ISBN-10: 0-13-239655-6
Print ISBN-13: 978-0-13-239655-4
Print ISBN-13: 978-0-13-239655-4
Pages: 744
Pages: 744
Table of Contents
Table of Contents
| Index
| Index
Overview
Overview
"Probably the most wide ranging and complete Linux device driver book I've read."
"Probably the most wide ranging and complete Linux device driver book I've read."
--Alan Cox, Linux Guru and Key Kernel Developer
--Alan Cox, Linux Guru and Key Kernel Developer
"Very comprehensive and detailed, covering almost every single Linux device driver type."
"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
--Theodore Ts'o, First Linux Kernel Developer in North America and Chief Platform Strategist of the Linux
Foundation
Foundation
The Most Practical Guide to Writing Linux Device Drivers
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
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
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
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
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.
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
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
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
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,
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
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
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.
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
• Addresses drivers discussed in no other book, including drivers for I2C, video, sound, PCMCIA, and different
types of flash memory
types of flash memory
• Demystifies essential kernel services and facilities, including kernel threads and helper interfaces
• Demystifies essential kernel services and facilities, including kernel threads and helper interfaces
• Teaches polling, asynchronous notification, and I/O control
• Teaches polling, asynchronous notification, and I/O control
• Introduces the Inter-Integrated Circuit Protocol for embedded Linux drivers
• Introduces the Inter-Integrated Circuit Protocol for embedded Linux drivers
• Covers multimedia device drivers using the Linux-Video subsystem and Linux-Audio framework
• 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
• Shows how Linux implements support for wireless technologies such as Bluetooth, Infrared, WiFi, and cellular
networking
networking
• Describes the entire driver development lifecycle, through debugging and maintenance
• Describes the entire driver development lifecycle, through debugging and maintenance
• Includes reference appendixes covering Linux assembly, BIOS calls, and Seq files
• Includes reference appendixes covering Linux assembly, BIOS calls, and Seq files
Essential Linux Device Drivers
by Sreekrishnan Venkateswaran
Publisher: Prentice Hall
Pub Date: March 27, 2008
Print ISBN-10: 0-13-239655-6
Print ISBN-13: 978-0-13-239655-4
Pages: 744
Table of Contents
| Index
Copyright
Prentice Hall Open Source Software Development Series
Foreword
Preface
Acknowledgments
About the Author
Chapter 1. Introduction
Evolution
The GNU Copyleft
Kernel.org
Mailing Lists and Forums
Linux Distributions
Looking at the Sources
Building the Kernel
Loadable Modules
Before Starting
Chapter 2. A Peek Inside the Kernel
Booting Up
Kernel Mode and User Mode
Process Context and Interrupt Context
Kernel Timers
Concurrency in the Kernel
Process Filesystem
Allocating Memory
Looking at the Sources
Chapter 3. Kernel Facilities
Kernel Threads
Helper Interfaces
Looking at the Sources
Chapter 4. Laying the Groundwork
Introducing Devices and Drivers
Interrupt Handling
The Linux Device Model
Memory Barriers
Power Management
Looking at the Sources
Chapter 5. Character Drivers
Char Driver Basics
Device Example: System CMOS
Sensing Data Availability
Talking to the Parallel Port
RTC Subsystem
Pseudo Char Drivers
Misc Drivers
Character Caveats
Looking at the Sources
Chapter 6. Serial Drivers
Layered Architecture
UART Drivers
TTY Drivers
Line Disciplines
What's PCMCIA/CF?
Linux-PCMCIA Subsystem
Host Controller Drivers
PCMCIA Core
Driver Services
Client Drivers
Tying the Pieces Together
PCMCIA Storage
Serial PCMCIA
Debugging
Looking at the Sources
Chapter 10. Peripheral Component Interconnect
The PCI Family
Addressing and Identification
Accessing PCI Regions
Direct Memory Access
Device Example: Ethernet-Modem Card
Debugging
Looking at the Sources
Chapter 11. Universal Serial Bus
Looking at the Sources
Chapter 7. Input Drivers
Input Event Drivers
Input Device Drivers
Debugging
Looking at the Sources
Chapter 8. The Inter-Integrated Circuit Protocol
What's I2C/SMBus?
I2C Core
Bus Transactions
Device Example: EEPROM
Device Example: Real Time Clock
I2C-dev
Hardware Monitoring Using LM-Sensors
The Serial Peripheral Interface Bus
The 1-Wire Bus
Debugging
Looking at the Sources
Chapter 9. PCMCIA and Compact Flash
USB Architecture
Linux-USB Subsystem
Driver Data Structures
Enumeration
Device Example: Telemetry Card
Class Drivers
Gadget Drivers
Debugging
Looking at the Sources
Chapter 12. Video Drivers
Display Architecture
Linux-Video Subsystem
Display Parameters
The Frame Buffer API
Frame Buffer Drivers
Console Drivers
Debugging
Looking at the Sources
Chapter 13. Audio Drivers
Audio Architecture
Linux-Sound Subsystem
Device Example: MP3 Player
Debugging
Looking at the Sources
Chapter 14. Block Drivers
Storage Technologies
Linux Block I/O Layer
I/O Schedulers
Block Driver Data Structures and Methods
Device Example: Simple Storage Controller
Advanced Topics
Debugging
Looking at the Sources
Chapter 15. Network Interface Cards
Driver Data Structures
Talking with Protocol Layers
Buffer Management and Concurrency Control
Device Example: Ethernet NIC
ISA Network Drivers
Asynchronous Transfer Mode
Network Throughput
Looking at the Sources
Chapter 16. Linux Without Wires
Chapter 17. Memory Technology Devices
Bluetooth
Infrared
WiFi
Cellular Networking
Current Trends
What's Flash Memory?
Linux-MTD Subsystem
Map Drivers
NOR Chip Drivers
NAND Chip Drivers
User Modules
MTD-Utils
Configuring MTD
eXecute In Place
The Firmware Hub
Debugging
Looking at the Sources
Challenges
Component Selection
Tool Chains
Embedded Bootloaders
Memory Layout
Kernel Porting
Embedded Drivers
The Root Filesystem
Test Infrastructure
Debugging
Chapter 18. Embedding Linux
Chapter 19. Drivers in User Space
Process Scheduling and Response Times
Accessing I/O Regions
Accessing Memory Regions
User Mode SCSI
User Mode USB
User Mode I2C
UIO
Looking at the Sources
Chapter 20. More Devices and Drivers
ECC Reporting
Frequency Scaling
Embedded Controllers
ACPI
ISA and MCA
FireWire
Intelligent Input/Output
Kernel Debuggers
Kernel Probes
Kexec and Kdump
Profiling
Tracing
Linux Test Project
User Mode Linux
Diagnostic Tools
Kernel Hacking Config Options
Test Equipment
Chapter 22. Maintenance and Delivery
Coding Style
Change Markers
Version Control
Consistent Checksums
Build Scripts
Portable Code
Chapter 23. Shutting Down
Amateur Radio
Voice over IP
High-Speed Interconnects
Chapter 21. Debugging Device Drivers
Checklist
What Next?
Debugging
Appendix A. Linux Assembly
Appendix B. Linux and the BIOS
Real Mode Calls
Protected Mode Calls
BIOS and Legacy Drivers
Appendix C. Seq Files
The Seq File Advantage
Updating the NVRAM Driver
Looking at the Sources
Index
Copyright
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as
trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim,
the designations have been printed with initial capital letters or in all capitals.
The author and publisher have taken care in the preparation of this book, but make no expressed or implied
warranty of any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental
or consequential damages in connection with or arising out of the use of the information or programs contained
herein.
The publisher offers excellent discounts on this book when ordered in quantity for bulk purchases or special
sales, which may include electronic versions and/or custom covers and content particular to your business,
training goals, marketing focus, and branding interests. For more information, please contact:
U.S. Corporate and Government Sales
(800) 382-3419
corpsales@pearsontechgroup.com
For sales outside the United States please contact:
International Sales
international@pearson.com
Visit us on the Web: www.informit.com/ph
Library of Congress Cataloging-in-Publication Data:
Venkateswaran, Sreekrishnan, 1972-
Essential Linux device drivers / Sreekrishnan Venkateswaran.-- 1st ed.
p. cm.
ISBN 0-13-239655-6 (hardback : alk. paper) 1. Linux device drivers (Computer programs)
I. Title.
QA76.76.D49V35 2008
005.4'32--dc22
2008000249
Copyright © 2008 Pearson Education, Inc.
All rights reserved. Printed in the United States of America. This publication is protected by copyright, and
permission must be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval
system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or
likewise. For information regarding permissions, write to:
Pearson Education, Inc
Rights and Contracts Department
501 Boylston Street, Suite 900
Boston, MA 02116
Fax (617) 671 3447
This material may be distributed only subject to the terms and conditions set forth in the Open Publication
License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/).
ISBN-13: 978-0-132-39655-4
Text printed in the United States on recycled paper at RR Donnelly in Crawfordsville, IN.
First printing March 2008
Editor-in-Chief
Mark Taub
Executive Editor
Debra Williams Cauley
Managing Editor
Gina Kanouse
Project Edito
Anne Goebel
Copy Editor
Keith Cline
Indexer
Erika Millen
Proofreader
San Dee Phillips
Technical Editors
Vamsi Krishna
Jim Lieb
Publishing Coordinator
Heather Fox
Interior Designer
Laura Robbins
Cover Designer
Alan Clements
Compositor
Molly Sharp
Dedication
This book is dedicated to the ten million visually challenged citizens of India. All author proceeds will go to
their cause.