El kernel no se compila solo, lo compila un compilador de C en el espacio de usuario. En la mayoría de las arquitecturas de CPU, la CPU tiene una cantidad de bits en registros especiales que representan qué privilegios tiene el código que se está ejecutando actualmente. En x86, estos son los bits de nivel de privilegio (CPL) actuales en el registro de segmento de código (CS). Si los bits de CPL son 00, se dice que el código se ejecuta en el anillo de seguridad 0 , también conocido como modo kernel . Si los bits de CPL son 11, se dice que el código se está ejecutando en el anillo de seguridad 3 , también conocido como modo de usuario . Las otras dos combinaciones, 01 y 10 (anillos de seguridad 1 y 2 respectivamente) rara vez se utilizan.
Las reglas sobre lo que el código puede y no puede hacer en el modo de usuario frente al modo de kernel son bastante complicadas, pero basta con decir que el modo de usuario tiene privilegios muy reducidos.
Ahora, cuando la gente habla del kernel de un sistema operativo, se refiere a las partes del código del sistema operativo que se ejecutan en modo kernel con privilegios elevados. Generalmente, los autores del kernel intentan mantener el kernel lo más pequeño posible por razones de seguridad, de modo que el código que no necesita privilegios adicionales no los tenga.
El compilador de C es un ejemplo de un programa de este tipo: no necesita los privilegios adicionales que ofrece el modo kernel, por lo que se ejecuta en modo de usuario, como la mayoría de los demás programas.
En el caso de Linux, el kernel consta de dos partes: el código fuente del kernel y el ejecutable compilado del kernel. Cualquier máquina con un compilador de C puede compilar el núcleo desde el código fuente en la imagen binaria. La pregunta, entonces, es qué hacer con esa imagen binaria.
Cuando instala Linux en un sistema nuevo, está instalando una imagen binaria precompilada, generalmente desde un medio físico (como un CD DVD) o desde la red. El BIOS cargará la (imagen binaria del) cargador de arranque del kernel desde el medio o la red, y luego el cargador de arranque instalará la (imagen binaria del) kernel en su disco duro. Luego, cuando reinicia, el BIOS carga el cargador de arranque del kernel desde su disco duro, y el cargador de arranque carga el kernel en la memoria y usted está listo y funcionando.
Si desea recompilar su propio núcleo, es un poco más complicado, pero se puede hacer.