The Linux Device Driver book is a great resource. In addition to the LDD book, the training course documents at free-electrons.com has rich background details about Linux, Kernel, especially embedded applications. There all the course materials are open sourced. Quite suitable for who has started a little bit into linux kernel programming, or who is looking for deeper and wider understanding of specific topics/areas.
To start with, you may look at least the first two courses:
And don’t forget the lxr source code cross-reference site on free-electrons.com, where you can check source code for various kernel versions.
If you favor an IDE especially NetBeans or Eclipse, and know how to run perl scripts and Makefile, you may look at my project Nbk tools on github.com. The script enables you to fully index a kernel project with NetBeans C++ kit. It greatly helps improve the experience to understand more of the source code internal structures and relations. I usually make a minimal configuration of the kernel plus the specific device I’m looking at, and make a build and do an index in NetBeans just for analyzing the kernel code. While do the actual development in another project. This script is tested directly in NetBeans, but with Eclipse the idea would be the same (you need to modify the script to suit Eclipse).