Para ter alguma chance de conseguir isso, primeiro você precisa que o GCC seja capaz de produzir o código objeto para sua CPU alvo, o kernel foi escrito usando o GCC e também assumimos que o GCC é usado para construir muito espaço do usuário aplicações também.
Você também precisa escrever as partes específicas da arquitetura no kernel para sua CPU e plataforma. Se você tiver baseado sua CPU em projetos MIPS existentes, isso tornará a vida um pouco mais fácil, por exemplo, o gerenciamento de gerenciamento de memória virtual já pode existir para sua CPU de destino se você tiver sorte, mas pode ser necessário um novo design.
Se você está escrevendo seu próprio compilador, então você precisa fazê-lo suportar todas as extensões específicas do GCC que o kernel suporta, e existem algumas. É muito mais fácil portar o GCC do que escrever o seu próprio a partir do zero.
Portar o kernel é o primeiro passo, mas para uma nova CPU você precisa pensar em como projetará a maneira como o espaço do usuário chama o sistema no kernel e você precisará escrever um hander de chamada do sistema para o kernel e também a chamada de sistema da biblioteca C do espaço do usuário também é ajustada. Você descobrirá que há uma enorme quantidade de esforço necessária apenas para chegar ao ponto em que você é capaz de obter o primeiro processo de inicialização do processo de inicialização do usuário. Você precisará então compilar todas as bibliotecas e utilitários principais apenas para obter uma inicialização básica do sistema. Não é trivial. O primeiro passo é ser capaz de construir ferramentas como o busybox, que fornecem um conjunto mínimo de ferramentas do Linux para conseguir um shell rodando com um conjunto mínimo de ferramentas para interagir com o sistema.De volta aos tempos do kernel 2.2, eu portei o Linux e o busybox para uma nova arquitetura (um processador de mídia VLIW) como parte de um projeto de pesquisa (que ficou enlatado) e levou cerca de um ano para chegar ao ponto poderia inicializar o kernel, executar o init e iniciar o busybox em um TTY serial. E isso não estava contando o esforço para obter um toolchain estável. Apenas esteja avisado, pode levar algum esforço.