O kernel não compila a si mesmo - ele é compilado por um compilador C no espaço do usuário. Na maioria das arquiteturas de CPU, a CPU possui um número de bits em registros especiais que representam quais privilégios o código atualmente em execução possui. No x86, esses são os bits de nível de privilégio (CPL) atuais no registro de segmento de código (CS). Se os bits CPL forem 00, o código será executado no anel de segurança 0 , também conhecido como modo kernel . Se os bits CPL forem 11, o código será executado no anel de segurança 3 , também conhecido como modo de usuário . As outras duas combinações, 01 e 10 (anéis de segurança 1 e 2 respectivamente) raramente são usadas.
As regras sobre o que o código pode e não pode fazer no modo de usuário versus modo kernel são bastante complicadas, mas basta dizer que o modo de usuário tem privilégios severamente reduzidos.
Agora, quando as pessoas falam sobre o kernel de um sistema operacional, elas estão se referindo às partes do código do sistema operacional que podem ser executadas no modo kernel com privilégios elevados. Geralmente, os autores do kernel tentam manter o kernel o menor possível por razões de segurança, de forma que o código que não precisa de privilégios extras não os tenha.
O compilador C é um exemplo de tal programa - ele não precisa dos privilégios extras oferecidos pelo modo kernel, então ele é executado no modo de usuário, como a maioria dos outros programas.
No caso do Linux, o kernel consiste em duas partes: o código-fonte do kernel e o executável compilado do kernel. Qualquer máquina com um compilador C pode compilar o kernel do código-fonte na imagem binária. A questão, então, é o que fazer com essa imagem binária.
Ao instalar o Linux em um novo sistema, você está instalando uma imagem binária pré-compilada, geralmente de uma mídia física (como um CD-DVD) ou da rede. O BIOS irá carregar o (imagem binária do) bootloader do kernel da mídia ou rede, e então o bootloader irá instalar o (imagem binária do) kernel em seu disco rígido. Então, quando você reinicializar, o BIOS carrega o carregador de inicialização do kernel do seu disco rígido, e o carregador de inicialização carrega o kernel na memória, e você está pronto e funcionando.
Se você quiser recompilar seu próprio kernel, isso é um pouco mais complicado, mas pode ser feito.