In my opinion the best way to do kernel development is to just look at device drivers in kernel sources, study what current drivers do and write your own driver.
The kernel supports su much heterogeneous devices and its APIs change continuously that it is practically impossible to write a complete guide on this topic.