Todos os comentários aqui cobrem todos os fundamentos para começar kkk, mas aqui vai mais uma dica extra:
Comece com uma base (ou não)
Desenvolver um SO é massante e você vai sofrer, pois não há dependências externas, não há stdlibs, então mire baixo. Primeiro, use um bootloader pronto (ou desenvolva o seu, a dor de cabeça é maior rsrs), ele já vai te ajudar a focar diretamente no Kernel.
Mire baixo
Não comece desenvolvendo já pensando em GUI, filesystem, drivers para teclado, mouse e etc. Vá aos poucos.
Primeiro foque em inicializar a pilha do Kernel em Assembly (importante para código C). Funcionou? Estude, entenda e pergunte a IA o porquê disso e como funciona internamente.
Crie drivers simples, como VGA para output de texto e aos poucos, vá escalando. Foque primeiro em algo pequeno para escalar mais tarde, é assim que nasce um SO.
Dica extra para DEBUG
O driver mais importante é o serial, pois você irá utilizar ele para debugar seu sistema. O VGA não é totalmente confiável, já o serial consegue enviar informações de logs para seu terminal (hospedeiro) antes mesmo do seu sistema crashar. Acredite em mim, isso é muito útil ksks.
[edit]
Use ferramentas como gdb para verificar os estados de registradores e flags importantes durante a execução. E objdump para analisar o binário do seu kernel.
É isso! Mantenha os estudos, foque e você vai chegar longe.