El árbol de fuentes del kernel
Obtener el código del kernel y aprender a navegar sus millones de líneas: la estructura de directorios, las herramientas de exploración, y cómo no perderse.
El kernel son más de 30 millones de líneas de código. Enfrentarse a eso sin un mapa es abrumador. Pero su estructura es lógica y sus herramientas de navegación, potentes. Aprender a moverte por el árbol de fuentes es lo que convierte “un océano de código” en “sé dónde buscar”.
- Obtener el código del kernel.
- La estructura de directorios de primer nivel.
- Herramientas para navegar el código.
- Cómo encontrar lo que buscas.
Obtener el código
# el árbol oficial de Linus (enorme, con todo el historial)
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
# o un tarball de una versión concreta desde kernel.org
# (más ligero si solo quieres compilar)
El repositorio incluye décadas de historia. Para explorar y aprender, también existe Elixir (elixir.bootlin.com): un navegador web del código con referencias cruzadas, ideal para estudiar sin clonar nada.
La estructura de directorios
El primer nivel del árbol es un mapa de los subsistemas (los del nivel 0):
| Directorio | Qué contiene |
|---|---|
kernel/ |
núcleo: planificador, gestión de procesos, tiempo |
mm/ |
memory management: asignadores, memoria virtual |
fs/ |
filesystems: el VFS y cada sistema de archivos |
drivers/ |
los drivers de dispositivos (¡la mayoría del código!) |
net/ |
la pila de red y los protocolos |
arch/ |
código específico de cada arquitectura (x86, arm64, riscv…) |
include/ |
los headers: include/linux/ es tu diccionario de APIs |
init/ |
el arranque del kernel (start_kernel) |
lib/ |
utilidades genéricas (estructuras de datos, etc.) |
Documentation/ |
la documentación oficial, oro puro |
Si te asombra el tamaño del kernel, mira dónde está: más de la mitad del código son drivers. El núcleo conceptual (planificador, memoria, VFS) es relativamente compacto y estable; la inmensa mayoría es soporte para los millones de dispositivos que existen. Esto es una buena noticia para quien empieza: no necesitas entender los 30 millones de líneas. El núcleo que de verdad tienes que comprender —lo que enseña este track— es una fracción, y los drivers son variaciones sobre patrones que aprenderás (nivel 29). Además, es donde más se contribuye: escribir o mejorar un driver es la vía de entrada habitual al kernel.
Navegar el código
Con millones de líneas, grep no basta. Las herramientas de referencias cruzadas te dejan saltar a la definición de cualquier símbolo:
# generar índices de navegación
make cscope # base de datos para cscope
make tags # tags para vim/emacs
# buscar dónde se define o usa algo
grep -rn "start_kernel" init/
Una verdad que libera: nadie entiende todo el kernel, ni siquiera sus mantenedores. La habilidad no es memorizarlo, sino saber navegarlo: partir de un síntoma o una función, seguir las referencias, leer la documentación del subsistema, y construir un modelo mental de la parte que te interesa. Los grandes desarrolladores del kernel son maestros de la exploración: usan Elixir, cscope, git blame y git log para entender por qué un código es como es, y la carpeta Documentation/ religiosamente. Aprender a leer código ajeno a esta escala —seguir el hilo, no perderte, saber qué ignorar— es quizá la habilidad más transferible de todo el track. Empieza siempre por Documentation/ del subsistema que te interese.
Un primer recorrido
El arranque del kernel es un buen punto de partida para orientarse: empieza en init/main.c, en la función start_kernel(), que inicializa cada subsistema en orden. Leerla (sin entenderlo todo) te da el índice de lo que el kernel monta al arrancar.
- Clona el kernel (o abre elixir.bootlin.com) y recorre los directorios de primer nivel.
- Localiza
init/main.cy encuentrastart_kernel(). - Abre un archivo de
Documentation/sobre un tema que te intrigue. - Usa
grep -rno Elixir para encontrar dónde se defineprintk.