This book is for a reader who is an accomplished C programmer and for someone who wants to learn how to do Linux Kernel Development. The author has been contributing to Linux for more than 15 years and he was a member of the team that developed Android mobile platform's kernel. Although the author explains some of the topics in detail (for example Process Scheduling), he glosses over some of the other topics (for example Process Management). In order to understand some of the theoretical concepts presented in the book, it is better to have a background of Operating Systems. Therefore, it is better to study this book along with a theoretical book on Operating Systems (Silberschatz, Galvin). Having said that, this book can serve as a useful introduction to someone who wants to know the design and implementation of the Linux kernel.
In the first few chapters, the author provides instructions for obtaining the Kernel source code and compiling it. In the rest of the chapters, the author gives details of each of the parts of the Linux kernel. In the chapter on Kernel Data Structures (Chapter 6), the author gives a detailed explanation of the most important data structures that are used in Linux (linked lists, queues, maps and red-black trees). The chapter on Debugging (Chapter 18) is full of useful tips for debugging the Linux Kernel. What I like most about the book is that the author is very practical with his approach and concludes his book by saying that "the only way to start (learning the Linux Kernel) is by reading and writing."