Learning Kernel Programming
Try to get hold of Robert Love's book on Linux Kernel Programming. Its very concise and easy to follow.
After that or along with that, you may want to take a look at "Understanding the Linux kernel".But I wouldn't recommend it during the early stages.
Also, look at the Linux kernel programming guide. Since a lot can be learnt from programing kernel modules, that guide will help you. And yes, for a lot of information, consult the 'documentation' sub-directory of the Kernel sources tarball.
How to begin with Windows Kernel Programming?
Read Windows Internals.
Read Windows Drivers Development.
Follow and read OSR Online.
To start writing read Writing your first driver.
This should cover you for several years or more.
Text book / online resource for learning to program at system/kernel level
I would like to suggest both the books by Robert Love. I've read a bit of the first one and its excellent. The latter was recommended by a friend.
Linux Kernel Development
Linux System Programming: Talking Directly to the Kernel and C Library
Learning Linux Kernel programming on a virtual machine on Ubuntu?
Yes you can safely test kernel modules on a virtual machine!
I'll give you some links that may help:
watch this site
- http://free-electrons.com/
in particular this book:
- http://free-electrons.com/doc/books/ldd3.pdf
Also this guide:
http://www.tldp.org/HOWTO/Module-HOWTO/
Kernel Programming From Beginner to Expert using C
These might help getting you there:
- The C Programming Language
- Understanding the Linux Kernel
- Linux Device Drivers
Maybe you should start with something other than the kernel first. Take any open source project written in C, get the source, try to fix open bugs or implement missing features. That will teach you a lot about C, and you'll get feedback about the code you write.
Once you're fluent in C you can start diving into the kernel source.
Related Topics
Linux Newbie: Linux VS Posix Manual
Different Results Between Ps Aux and 'Ps Aux' Inside a Script
Using Ld_Preload Mixed 64Bit/32Bit Environment in Linux
Matlab Mex Socket Wrapper Library
Ffmpeg Fix Watermark Size or Percentage
How to Grep a String in a Directory and All Its Subdirectories
How to Map a Hostname *And* a Port with /Etc/Hosts
Buffered Asynchronous File I/O on Linux
Using Linux, How to Specify Which Ethernet Interface Data Is Transmitted On
Isolate Kernel Module to a Specific Core Using Cpuset
How to Make One Linux Kernel Module Depend on Another External Module with Depmod
Bash, Linux, Need to Remove Lines from One File Based on Matching Content from Another File
How to Do 'Ret' Instruction from Code at _Start in MACos? Linux
Dyld_Library_Path Environment Variable Is Not Forwarded to External Command in Makefile on MACos
Shell Script for Multithreading a Process
Linux Command to Translate Domain Name to Ip
How to Get the Exit Code of Spawned Process in Expect Shell Script