Como o código de inicialização do linux pode ser escrito em C?

Sou novato em aprender o desenvolvimento de sistemas operacionais. No livro que li, ele disse que o carregador de inicialização copiará o primeiro MBR para 0x7c00 e começará a partir daí em modo real.

E, o exemplo começa com o código de montagem de 16 bits. Mas, quando eu olhei o kernel do linux de hoje,arch / x86 / boot possui 'header.S' e 'boot.h', mas o código real é implementado em main.c.

Isso parece ser útil por "não escrever montagem". Mas, como isso é feito especificamente no Linux? Eu posso aproximadamente imaginar que pode haver especialgcc opções e estratégia de link, mas não consigo ver os detalhes.

questionAnswers(1)

yourAnswerToTheQuestion