I've read both Bovit and Caseti's book Understand the Linux Kernel and Robert Love's Linux Kernel Development. The Bovit and Caseti book focus' on the 2.4 series of kernels and goes into great detail of all the major components of the kernel. The Love book doesn't necessarily always go into as great a detail, but it covers the 2.6 kernel. Love is the guy responsible for the pre-emptible kernel.
Saying the books are "exciting" would be a lie, but they are quite informative. Some of the chapters, like the memory management chapter really have to be read several times to totally understand.
At any rate, after reading both books I was able to write my own O(1) scheduler for 2.4 (2.6 already has one) as well as my own basic file system and some custom syscalls.