Most of the information in this book has been extracted from the kernel sources, which are the best documentation about the Linux kernel.
Kernel sources can be retrieved from hundreds of FTP sites around the world, so we won't list them here.
Version dependencies are best checked by looking at the patches, which are available from the same places where you get the whole source. The program called repatch might help you in checking how a single file has been modified throughout the different kernel patches; it is available in the source files provided on the O'Reilly FTP site.
While the bookstores are full of technical books, there are surprisingly few that are directly relevant to Linux kernel programming. Here is a selection of books found on our shelves.
This book covers the design and implementation of the Linux kernel in great detail. It is more oriented toward providing an understanding of the algorithms used than documenting the kernel API. This book covers the 2.4 kernel but still contains a great deal of useful information.
Developers wanting to know more about the Linux virtual memory subsystem may wish to have a look at this book. It is centered around the 2.4 kernel but contains 2.6 information as well.
This book covers Linux kernel programming with a broad scope. It is a reference that should be on every Linux hacker's bookshelf.
This book will be useful to those writing Linux code for embedded systems.
Though quite old, this book covers all the issues related to Unix implementations. It was the main source of inspiration for Linus in the first Linux version.
Every detail of Unix system calls is described herein, which is a good companion when implementing advanced features in the device methods.
Perhaps the definitive book on the Unix network programming API.
In the fast-moving world of Linux kernel development, the most current information is often found online. The following is our selection of the best web sites as of this writing:
This site hosts the source repositories used by a number of prominent kernel developers. In particular, the project called "linus" contains the mainline kernel as maintained by Linus Torvalds. If you are curious about the very latest patches which have been applied to the kernel, this is the place to look.
The Linux Documentation Project carries a lot of interesting documents called "HOWTOs"; some of them are pretty technical and cover kernel-related topics.
This page contains many kernel-oriented magazine articles written by Alessandro Rubini. Some of them date back a few years, but they usually still apply; some of them are in Italian, but usually an English translation is available as well.
At the risk of seeming self-serving, we point out this news site that, among other things, offers regular kernel development coverage and API change information.
Kernel Traffic is a popular site that provides weekly summaries of discussions on the Linux kernel development mailing list.
This site picks up occasional interesting developments in the Linux and BSD kernel communities.
This site is oriented toward new kernel developers. There is beginning information, a FAQ, and an associated IRC channel for those looking for immediate assistance.
The Linux Kernel Janitor project is the place where new kernel programmers can learn how to join in the development effort. A wide range of small, generally simple tasks that need to be done all over the kernel are described here. There is a mailing list that helps new developers get these changes into the main kernel tree. This is a great place for anyone wanting to start doing Linux kernel development but not knowing where to begin.