In the true open-source spirit, the authors of some great Linux kernel books have decided to make these books freely available for everyone. They are good material for anyone interested in the Linux kernel, and also a good reference for professionals working with the kernel. At least I have personally found these books very useful.
Linux Device Drivers
On the surface, Linux Device Drivers written by Jonathan Corbet, Alessandro Rubini and Greg Kroah-Hartman seems to be about writing device drivers for a Linux system. However, it is actually much more than just that. The book also unveils the internals of the operating system, and provides a lot of in-depth knowledge about the Linux kernel.
The internal kernel subsystems and interfaces seem to be a bit of a moving target since they can change between kernel version. Therefore it is also a good idea to keep the latest kernel source at hand. Sites like Free Electrons Kernel Cross Reference are useful for navigating the source code.
Probably the best way to get started with device drivers is to actually write one. The book provides good examples starting from simple character devices. It also possible to write simple kernel modules (i.e. drivers) without any physical hardware to control, which makes the initial startup even simpler.
Available at: https://lwn.net/Kernel/LDD3/
Linux Kernel in a Nutshell
Linux Kernel in a Nutshell written by the kernel developer veteran Greg Kroah-Hartman provides practical guide how to fetch, configure and build a Linux kernel. These tasks are very common especially for embedded systems developers and maintainers who are working with custom Linux hardware.
“I want this book to help bring more people into the Linux kernel development fold. The act of building a customized kernel for your machine is one of the basic tasks needed to become a Linux kernel developer. The more people that try this out, and realize that there is not any real magic behind the whole Linux kernel process, the more people will be willing to jump in and help out in making the kernel the best that it can be.”
I fully agree. This is probably an understatement, but in practice the kernel is mainly just C code. Admittedly, there is quite a lot of it, and it can feel daunting to get started.The main goal of this book is to make this initial start-up less daunting, and to get more people involved.
Note: the book is written with 2.6.x kernel version so many of the individual configurations have moved around or changed. Still, the main concepts apply.
Available at: http://www.kroah.com/lkn/