O próprio kernel Linux é escrito principalmente em C com partes específicas da máquina em Assembler (código de inicialização da máquina, etc.). Para documentação, o mais fácil é ver a pasta Documentation
dentro das fontes do kernel.
Eu não conheço sua experiência com desenvolvimento de kernel, mas para começar você deve ter uma compreensão básica sobre os princípios do sistema operacional, existem bons livros por aí. Eu sugiro ler
-
Andrew S. Tanenbaum: "Sistemas operacionais modernos" para uma ampla visão geral dos conceitos de SO
Daniel P. Povet: "Entendendo o Kernel do Linux" para uma boa explicação sobre os conceitos do kernel e para entender como o kernel Linux basicamente funciona e implementa as coisas.
Além disso, se você não tem experiência, você pode querer começar com algo menor que o kernel do Linux. Um bom projeto para analisar (já que é explicitamente destinado a ensinar conceitos de SO) seria claramente Minix (escrito por Andrew S. Tanenbaum mencionado anteriormente).