Guía de introducción al desarrollo sobre el kernel de Linux
Este proyecto tiene como objetivo ser una guía introductoria para aprender y explorar el desarrollo sobre el kernel de Linux. A continuación, se presenta el índice de los temas que se abordarán:
-
- ¿Qué es el kernel de Linux y cómo se estructura?
- Monolítico vs microkernel
- Kernel space vs user space
- Arquitectura básica del kernel:
- Planificación de procesos
- Gestión de memoria
- Sistemas de archivos
- Controladores de dispositivos (drivers)
- Ejercicios prácticos:
- Ver la versión del kernel con
uname -ry/proc/version - Usar
stracepara analizar llamadas al sistema
- Ver la versión del kernel con
-
- Preparar un entorno seguro (máquina virtual o Raspberry Pi)
- Descargar y compilar el kernel desde el repositorio oficial
- Configurar el kernel con
menuconfig - Compilar y bootear con tu kernel usando QEMU
- Crear un sistema de archivos raíz inicial (initramfs) con BusyBox
- Ejercicios prácticos:
- Configurar y compilar BusyBox como binario estático
- Crear un archivo
initpara el initramfs - Ejecutar el kernel con el initramfs en QEMU
-
- Crear un módulo básico (
hello.c) - Crear un
Makefilepara compilar el módulo - Recompilar el kernel con soporte para módulos
- Compilar el módulo y generar el archivo
.ko - Instalar el módulo en el initramfs
- Cargar y descargar el módulo en QEMU
- Ejercicios prácticos:
- Usar
insmod,rmmod,lsmodymodinfopara gestionar módulos - Verificar mensajes del módulo con
dmesg
- Usar
- Crear un módulo básico (
-
Desarrollo de módulos
- Hooks y puntos de extensión del kernel
- Acceso a memoria y estructuras del kernel
- Controladores de dispositivos (drivers):
- Character device drivers
- Bloque vs carácter
- Ejemplo: leer/escribir desde user space a un driver
-
Depuración y testing
- Uso de
printk,dmesg,gdb,ftrace,perf - Verificación de errores (
checkpatch.pl,sparse,smatch) - Pruebas en
qemuo máquinas virtuales - Uso de
kprobes,eBPFy tracing
- Uso de
-
Internals y subsistemas del kernel
- El scheduler (
kernel/sched/) - Gestión de memoria (
mm/) - System calls (
arch/,kernel/sys.c) - Sysfs y Procfs
- Locks, semáforos, y concurrencia
- Interrupts y manejo de hardware
- El scheduler (
-
Contribuir al kernel (nivel avanzado)
- Estilo de código del kernel (Documentation/process)
- Uso de
gitpara parches (git format-patch,git send-email) - Herramientas para contribuir (
scripts/checkpatch.pl) - Suscribirte a listas de correo
- Enviar tu primer parche
-
Casos de estudio y proyectos
- Crear tu propio sistema de archivos
- Hacer un scheduler básico
- Implementar una syscall propia (en laboratorio)
- Portar el kernel a una arquitectura pequeña (ej: ARM, Raspberry)
¡Bienvenido al mundo del desarrollo del kernel de Linux!