"There are many sources of information about the Linux
kernel, but not many on how to learn about it. Someone who wants to
learn about the Linux kernel will find themselves faced with a huge
array of incomplete and slightly outdated HOWTOs, tutorials and
books. Combine this with the fact that most of the comments in the
code seem to be optimized for people who already know their way
around can make the task of coming up to speed on the Linux kernel
a daunting one.
The first thing one usually does when trying to learn about a
piece of software is to check out the documentation available.
There are three types of software documentation: tutorial, mnemonic
and misleading. Tutorial explains the software to someone new,
mnemonic reminds someone who already knew it and misleading is just
wrong, usually ignored by those who know.
There are four basic ways that software can be documented:
function or file headers, inline comments, function and variable
names, and external documents.
It is my experience that most of the documentation directly
associated with the code is more mnemonic than tutorial. A cynical
individual might suspect that this was done deliberately to force
newcomers to delve more deeply into the code before making any
modifications. I often found that it would require a day or two of
research to find which three lines of code I needed to change, and
several more days of checking and cross checking to make sure. Most
of the tutorial documentation was external to the code."