wandres.dev
LABORATORIO (QEMU) · VM segura y gdb

Un entorno de kernel seguro con QEMU

Nunca desarrolles el kernel en tu máquina real. Monta un laboratorio con QEMU para arrancar, romper y reiniciar kernels sin riesgo, en segundos.

⏱ 12 min

La regla número uno del desarrollo de kernel: no lo hagas en tu máquina. Un bug puede colgar el sistema o corromper el disco. La solución es un laboratorio virtual con QEMU, donde un kernel que revienta es solo una VM que reinicias. Montarlo es tu primer acto de profesionalismo.

🎯 Al terminar esta lección sabrás
  • Por qué una máquina virtual, no la real.
  • Arrancar un kernel en QEMU.
  • initramfs: un mínimo espacio de usuario.
  • Herramientas que aceleran el ciclo.

Por qué QEMU

⚠️
Un panic en tu máquina real = trabajo perdido

Repito la advertencia del nivel 0 porque es crítica: un error de kernel no es un segfault amable. Puede colgar la máquina (perdiendo lo que tuvieras sin guardar), corromper un sistema de archivos montado, o dejar el hardware en un estado raro. Desarrollar el kernel en tu equipo principal es como hacer cirugía en ti mismo. QEMU te da un paciente virtual: un kernel que provoca un panic dentro de QEMU solo cierra la VM. Reinicias en segundos y sigues. No es opcional: es la infraestructura básica del oficio.

Arrancar un kernel en QEMU

QEMU emula una máquina completa. Puedes arrancar directamente una imagen de kernel que hayas compilado (nivel 5):

qemu-system-x86_64 \
    -kernel arch/x86/boot/bzImage \      # tu kernel compilado
    -initrd initramfs.cpio.gz \          # un mini espacio de usuario
    -append "console=ttyS0" \            # línea de comandos del kernel
    -nographic                            # todo por la terminal

-nographic redirige la consola a tu terminal, así ves el arranque y tienes una shell dentro de la VM, sin ventana gráfica.

initramfs: el mínimo espacio de usuario

Un kernel solo no hace nada útil: necesita un primer proceso (nivel 1.2). El initramfs es un pequeño sistema de archivos en memoria con lo justo —una shell como BusyBox y tus módulos— para poder trabajar. Lo empaquetas y se lo das a QEMU con -initrd. Dentro, cargas tu módulo con insmod (nivel 7) y ves qué hace.

Acelera el ciclo con virtme-ng

Montar initramfs a mano es tedioso. virtme-ng (vng) automatiza todo: arranca tu kernel recién compilado en QEMU usando tu propio sistema de archivos (solo lectura), con una shell lista, en un comando:

vng --build          # construye un kernel apto para virtme
vng                  # arranca ese kernel en QEMU con tu FS, al instante
El ciclo rápido lo cambia todo

La diferencia entre aprender el kernel y abandonarlo suele ser la velocidad del ciclo editar→probar. Sin un buen setup, probar un cambio significa: recompilar, montar initramfs, arrancar, probar, apagar — minutos por iteración, y el desánimo. Con un módulo out-of-tree (nivel 5.1) + virtme-ng, el ciclo es: make (segundos), vng, insmod, ver dmesg, salir. Segundos por iteración. Esta agilidad es lo que hace posible experimentar de verdad —probar diez ideas en el tiempo que antes tardabas en una— y por tanto aprender. Invierte en tu laboratorio antes que en cualquier otra cosa: es el multiplicador de todo lo demás.

⚔️ Monta tu laboratorio
  1. Instala QEMU y arranca cualquier kernel (el tuyo o el de tu distro) con -nographic.
  2. Instala virtme-ng y prueba vng sobre un kernel compilado.
  3. Dentro de la VM, comprueba que tienes una shell y dmesg funciona.
  4. Provoca a propósito algo drástico y confirma que solo afecta a la VM: reinicias y sigues.