sure, in my opinion these 3 books are essential, ["Linux Kernel Development", Robert Love](https://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672329468), ["Linux Device Drivers", Jonathan Corbet](https://www.amazon.com/Linux-Device-Drivers-Jonathan-Corbet/dp/0596005903/) and ["Understanding the Linux Kernel", Daniel P. Bovet](https://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652). In addition, read and _understand_ the code. Make use of [LXR](http://lxr.free-electrons.com).
I had previously bought these books on recommendation for the same purpose but I never got to studying them myself so only take them as second-hand advice.
> Wow, that's really great. Where do you even start to learn to program this kind of thing? Like accessing hardware
This: https://www.amazon.com/dp/0596005903/ should cover most of it.
This is the one I have:
https://www.amazon.com/Linux-Device-Drivers-Jonathan-Corbet/dp/0596005903
I had previously bought these books on recommendation for the same purpose but I never got to studying them myself so only take them as second-hand advice.
Several texts:
For Windows drivers also see this blog: http://blogs.msdn.com/doronh/
For Linux based development, two good books come to mind: Linux Device Drivers and Linux Kernel Development. The Linux Device Drivers book can be a bit daunting so a good introduction to the Kernel is a useful starting point.