This text is aimed at anyone who wants to support computer peripherals under the Linux operating system or who wants to develop new hardware and run it under Linux. As the fastest-growing segment of the Unix market, Linux is winning over enthusiastic adherents in many application areas, and is being viewed more and more as a good platform for embedded systems. "Linux Device Drivers" shows how to write drivers for a wide range of devices. Drivers for character devices, block devices, and network interfaces are all described in step-by-step form and are illustrated with full-featured examples that show driver design issues and can be executed without special hardware. Major changes in the second edition include support for symmetric multiprocessing (SMP), Universal Service Bus (USB), and some new platforms. For those who are curious about how an operating system does its job, this book provides insights into address spaces, asynchronous events, and I/O. Portability is a major concern in the text. The book is centered on kernel version 2.4, but includes information for kernels back to 2.0 where feasible. It also shows how to maximize portability among hardware platforms; examples were tested on IA32 (PC) and IA64, PowerPC, SPARC and SPARC64, Alpha, ARM, and MIPS.