First you Should know about your Hardware you are Aiming (ARM, x86, MIPS , etc) then you are going through these questions:
1- How you are going to boot the kernel ? boot loader (you have to write it some thing like : [uBoot, grub,.... ])
2- What hardware you support? as above.
3- How are you going to provide OS Services (Memory management, Scheduler , etc)
4- How will you going to provide Hardware Handling ? Device drivers .
Then start coding here and you should have a good knowledge about C and Assembly languages .
Finally this would help :
http://www.ezequielaceto.com.ar/techblog/?p=501[
^]