At first glance the title might appear very specific and in a way it is.
It does indeed describe writing device drivers for Linux, but it also covers
much more. The book starts with an introduction of what a device driver is and
the general issues that the writer must be aware of, together with instructions
for building and running a basic device driver module. Over the next fifteen
chapters, the book describes the use, design and implementation of the three
main types of Linux device driver Char (i.e. serial ports), Block (i.e. floppy
discs) and Network, together with different debugging techniques, interrupt
handling, memory management, hardware management, multiple threads and
peripheral buses. As you progress through the book the device drivers created
(all source code is available via the Internet) gradually get more complex and
complete. Throughout the book the Author attempts where possible to make all of
the example drivers independent of hardware platform (PC, Sparc, Alpha, etc.),
Linux distribution and kernel version. Any dependencies are highlighted with
particular emphasis given to the differences between and portability issues
relating to, the 1.2.x and 2.1.x releases of the kernel. The concluding chapters
contain a tour of the Linux kernel itself and a description of recent
developments in the (what was) upcoming 2.2 kernel release.
The book assumes an understanding of C and some background in Unix (for the
commands and system calls). However, apart from this basic knowledge, a machine
running Linux and the example source code is all that is required to create a
wide variety of device drivers. Although most drivers interact with actual
hardware devices, the only time that a soldering iron needs to be wielded is to
attach a couple of wires to a parallel port connector.
This book fits perfectly into the O'Reilly family. It's written in a clear and
readable style with an appropriate level of detail and by an author who has a
real enthusiasm for the topic. It's not only an excellent introduction for those
wishing to write device drivers for Linux, but also for those wanting to better
understand the issues relating to device drivers in general.