Compila tu propio kernel realtime en Debian y Ubuntu

El uso de un kernel modificado con los parches realtime es muy adecuado para sistemas de escritorio, y cabe decir que imprescindible para el creativo multimedia, necesitado de bajas latencias y de la mejor respuesta. Por suerte, hay un gran equipo de gente trabajando en los parches necesarios para transformar un kernel estándar Linux en uno que implemente multitarea apropiativa. Es decir, aquel que permite definir una serie de tareas que van a tener permitido acaparar el tiempo de CPU todo lo que necesiten para asegurar un mejor funcionamiento.

En particular, en el trabajo con audio, permitir un funcionamiento en tiempo real o apropiativo del servidor JACK facilita las latencias más bajas y la ausencia total de artificios en el audio. En el momento en el que JACK necesite la CPU, ninguna otra tarea en el sistema va a competir por ella. Cuando tú tienes el paquete de Donuts en la mano, tus amigos sólo comen los que quieres que coman.

Existe la posibilidad de acceder a un kernel realtime empaquetado en la mayor parte de las distribuciones más populares. Esta explicación te permite disponer de la ultimísima versión del mismo en tu Debian o Ubuntu, sin que necesites esperar a que alguien lo compile y lo empaquete por ti.

Requisitos previos

Asegúrate de que tu usuario es miembro del grupo src ejecutando el comando groups. Si src no aparece entre los grupos listados ejecuta como root:

  # adduser ismael src
  

Sustituye por supuesto ismael por tu nombre de usuario en tu sistema. Ahora reinicia la sesión y vuelve a ejecutar groups para comprobarlo. Esto es necesario para poder trabajar bajo el directorio /usr/src.

  $ groups ismael
  ismael : ismael dialout cdrom floppy audio src video plugdev netdev
  

Si quieres estar pendiente de las novedades en el soporte realtime al kernel Linux, deberías estar suscrito a la lista de correo linux-rt-users en vger.kernel.org. Simplemente envía un mensaje de correo sin asunto a [email protected] con el siguiente texto en el cuerpo:

  subscribe linux-rt-users
  

Recibirás mensajes de progreso y confirmación, simplemente sigue el proceso sugerido.

Una vez suscrito, las novedades en la serie preempt-rt del kernel son anunciadas en mensajes de correo recibidos de Thomas Gleixner con un asunto como éste.

  [Announce] 2.6.29.4-rt16
  

Te resultará sencillo filtrar estos mensajes, por ejemplo moviéndolos a una mbox separada o marcándolos con una estrella en Gmail. Explicar la forma de hacer esto queda fuera del alcance de este artículo.

El cuerpo del mensaje contendrá información como ésta.

  We are pleased to announce the next update to our new preempt-rt
  series.

  - rebase to 2.6.29.4 (no conflicts)
  - futex updates (tglx, dvhart)

  Download locations:

  http://rt.et.redhat.com/download/
  http://www.kernel.org/pub/linux/kernel/projects/rt/

  Information on the RT patch can be found at:

  http://rt.wiki.kernel.org/content/Main_Page

  to build the 2.6.29.4-rt16 tree, the following patches should be
  applied:

  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.4.tar.bz2
  http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.29.4-rt16.bz2

  The broken out patches are also available at the same download
  locations.

  Enjoy !

  tglx

  --
  To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
  the body of a message to [email protected]
  More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Descarga y parchea el kernel

Primero descarga el kernel sobre el que hay que aplicar los parches, en nuestro caso el 2.6.29.4.

  $ cd /usr/src
  $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.4.tar.bz2
  

Y ahora el parche realtime que se está anunciando con el mensaje de correo.

  $ wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.29.4-rt16.bz2
  

O bien visita esa URL y mira qué hay de nuevo. Para cuando vayas a compilar, una versión más reciente del parche podría estar disponible.

Descomprime ahora las fuentes del kernel.

  $ tar xvfj linux-2.6.29.4.tar.bz2
  

Y aplica el parche realtime.

  $ cd linux-2.6.29.4
  $ bzcat ../patch-2.6.29.4-rt16.bz2 | patch -p1
  

Configura y compila el kernel

Procede ahora a configurar el kernel.

  $ make clean && make mrproper
  $ cp /boot/config-`uname -r` .config
  $ make menuconfig
  

Visita ahora la opción de menú Processor type and features:

Asegúrate de que High Resolution Timer Support y Symmetric multi-processing support están activados.

En Processor family, elige la CPU de tu sistema.

En Preemption Mode, elige Complete Preemption (Real-Time).

En Timer frequency, selecciona 1000 HZ.

Selecciona Exit y contesta Yes a la pregunta sobre si salvar la configuración del kernel.

Es momento de iniciar la compilación. A la versión del kernel ya le habrá sido añadida la del parche realtime, y como revisión utilizamos el nombre de nuestra máquina —recuerda que hemos elegido nuestra CPU y el kernel podría no ser utilizable en otros ordenadores— y una marca temporal. Construirás la imagen del kernel y el correspondiente paquete con los ficheros de cabecera, necesarios más tarde para compilar tus módulos. Ejecuta make-kpkg, hazte un café, o dos, y vuelve cuando haya terminado.

  $ make-kpkg clean
  $ make-kpkg --rootcmd fakeroot --initrd --revision `hostname -s`~`date +%Y%m%d` kernel_image kernel_headers
  

Estás ahora haciendo surf sobre la cresta de peligrosas olas. No hay ninguna garantía de que todo va a funcionar bien. De hecho, lo que se espera de ti ahora es que reportes cualquier inconveniente a la lista de correo. El placer de estar siendo el primero en correr algo que a los usuarios de Ubuntu Studio les quedan meses para disfrutar, por supuesto no te lo quita nadie.

Utiliza Cyclictest para medir la respuesta de tu sistema con temporizadores de alta resolución y baja latencia. Deja tus resultados junto con la configuración de tu máquina y la versión del kernel que estás usando en los comentarios.

Sólo para gurús ;)

Si eres usuario de Debian inestable, podrías haber notado que compilar un kernel utilizable se ha complicado en los últimos tiempos, después de las últimas modificaciones de Manoj Srivastava al paquete kernel-package. Resumiendo, Manoj asume ahora que cada empaquetador podría desear elegir su propia forma de crear la imagen initrd con los módulos necesarios para el arranque de la máquina. No se presume si por defecto se va a utilizar initramfs o yaird, o cualquier otra aplicación. De ahí que aunque especifiques –initrd como argumento a make-kpkg, aquella imagen no va a ser creada y te expones a un kernel panic durante el arranque con el nuevo núcleo.

La solución es copiar uno de los scripts de ejemplo proporcionados con el paquete kernel-package al directorio que aloja aquellos a ser ejecutados durante la post instalación del kernel. Por si el update-grub final no se ejecutase en el momento adecuado, es decir, después de que la imagen initrd haya sido creada, copiaremos allí también el ejecutable, modificando los nombres de fichero para elegir su orden de ejecución.

  # cp /usr/share/kernel-package/examples/etc/kernel/postinst.d/initramfs /etc/kernel/postinst.d/40initramfs
  # cp /usr/sbin/update-grub /etc/kernel/postinst.d/99update-grub
  

Ah, si la compilación falla por la ausencia del fichero zlib.h, simplemente instala el paquete zlib1g-dev y prueba de nuevo.

Buenas noches y buena suerte.

¿Te pareció interesante? Sé tan amable de menear este artículo.

Audio Debian jack kernel Linux realtime Ubuntu Video

Bookmark and Share votar

18 Respuestas to “Compila tu propio kernel realtime en Debian y Ubuntu”

  1. Compila tu propio kernel realtime en Debian y Ubuntu | Linux AV…

    El uso de un kernel modificado con los parches realtime es muy adecuado para sistemas de escritorio, y cabe decir que imprescindible para el creativo multimedia, necesitado de bajas latencias y de la mejor respuesta. Por suerte, hay un gran equipo de g…

  2. Compila tu propio kernel realtime en Debian y Ubuntu…

    El uso de un kernel modificado con los parches realtime es muy adecuado para sistemas de escritorio, y cabe decir que imprescindible para el creativo multimedia, necesitado de bajas latencias y de la mejor respuesta. Por suerte, hay un gran equipo de g…

  3. Tengo un Athlon X2, pero quiero 32 bits:
    “En Processor family, elige la CPU de tu sistema.”

    ¿que tan al pie de la letra sigo esto?

  4. bien, primero he de agradecer que compartas tu sabiduría, tu blog es de los mejores que he visto para linux, yo soy un newbie, y seguí los pasos del tuto, y no me queda claro el final, una vez compilé con éxito un kernel en puppy siguiendo los pasos del readme, pero siento que hay aqui un paso obvio al final que desconozco ¿debo entrar a la carpeta Debian y copiar archivos manualmente al /boot y al /lib/modules?
    ¿hay un comando o script que pone todo en su lugar? ¿puedes darme un link que me guíe? gracias, espero no contrariar, los pasos que das no son iguales a los que conocía, y me perdí.

  5. alfonso, me temo que los pasos que doy son para Debian inestable, y para versiones algo menos “al límite” podrían ser distintos.

  6. ok, entendido.

  7. Hola, no tengo experiencia con estos temas, pero estoy interesado en tener instalado el kernel realtime. ¿No funciona instalando así?

    sudo aptitude install linux-rt

    Si funciona, creo que es mucho más sencillo y seguro, ¿no?

    Gracias

  8. Sí, estas instrucciones son sólo por si quieres correr un kernel realtime aún más nuevo que el disponible para tu distro.

  9. Hola todo me resulta perfecto hasta que llego al paso siguiente:

    $ make menuconfig

    me sale el error de que instale librerias ncurses y intente denuevo el comando, pero yo tengo instalado las librerias y ahi me quedo.
    la version de kernel es 2.6.28-11.

    Estoy trabajando en Vbox.

  10. $ sudo apt-get install libncurses5-dev

  11. Hola gracias por el comando de la para instalar la libreria, ahora el problema que tengo es que no encuentro la opcion Complete Preemption (Real-Time). en En Preemption Model solo otras opciones.

  12. Igual no están disponibles las opciones avanzadas, recuerda copiar el config de tu kernel actual al .config en el directorio de las fuentes del kernel.

  13. mi kernel 2.6.26-2-686 ,y no lo encuentro en este listado http://www.kernel.org/pub/linux/kernel/projects/rt/ te agradeceria que me recomiendes cual seria el mejor para aplicar el parche a mi sistema(debian 5 stable) gracias

  14. Segui los pasos y va de 10, pero cual es la ventaja real de hacer esto y usar el kernel por defecto?

    pregunto por que yo no noto la diferencia, claro que lo mio es muy basico, creox y alguna que otra cosita.

    Saludos y gracias por la respuesta

  15. muchas gracias por el post, mi laptop tiene un procesador intel pentium dual T2370, estoy tratando de compilar el kernel 2.6.33.1, pero despues de horas de compilar, me tira el siguiente error:

    Root device is (8, 2)
    Setup is 13692 bytes (padded to 13824 bytes).
    System is 2341 kB
    CRC e11d22ea
    Kernel: arch/x86/boot/bzImage is ready (#3)
    make[1]: se sale del directorio `/media/E/Administrador/software/debian/software/linux-2.6.33.1′
    /usr/bin/make ARCH=x86_64 \
    modules
    make[1]: se ingresa al directorio `/media/E/Administrador/software/debian/software/linux-2.6.33.1′
    CHK include/linux/version.h
    CHK include/generated/utsrelease.h
    CALL scripts/checksyscalls.sh
    CC [M] drivers/staging/comedi/drivers/quatech_daqp_cs.o
    drivers/staging/comedi/drivers/quatech_daqp_cs.c:70: error: field eos’ has incomplete type
    drivers/staging/comedi/drivers/quatech_daqp_cs.c: In function daqp_interrupt’:
    drivers/staging/comedi/drivers/quatech_daqp_cs.c:291: error: implicit declaration of function up’
    drivers/staging/comedi/drivers/quatech_daqp_cs.c: In function daqp_ai_insn_read’:
    drivers/staging/comedi/drivers/quatech_daqp_cs.c:405: error: implicit declaration of function sema_init’
    drivers/staging/comedi/drivers/quatech_daqp_cs.c:418: error: implicit declaration of function down_interruptible’
    drivers/staging/comedi/drivers/quatech_daqp_cs.c: In function daqp_cs_attach’:
    drivers/staging/comedi/drivers/quatech_daqp_cs.c:1045: warning: assignment from incompatible pointer type
    make[5]: *** [drivers/staging/comedi/drivers/quatech_daqp_cs.o] Error 1
    make[4]: *** [drivers/staging/comedi/drivers] Error 2
    make[3]: *** [drivers/staging/comedi] Error 2
    make[2]: *** [drivers/staging] Error 2
    make[1]: *** [drivers] Error 2
    make[1]: se sale del directorio `/media/E/Administrador/software/debian/software/linux-2.6.33.1′
    make: *** [debian/stamp/build/kernel] Error 2

    de ante mano muchas gracias por cualquier ayuda que pueda brindarme.

  16. Ésa por suerte es fácil. Los drivers staging se pegan con los parches realtime. Simplemente no los compiles, es muy improbable que los necesites.

    http://patchwork.kernel.org/patch/30107/

  17. Compila tu propio kernel realtime en Debian y Ubuntu…

    El uso de un kernel modificado con los parches realtime es muy adecuado para sistemas de escritorio, y cabe decir que imprescindible para el creativo multimedia, necesitado de bajas latencias y de la mejor respuesta. Por suerte, hay un gran……

  18. Disculpen una pregunta de aficionado:
    ¿Por qué no vienen todas las distros con el kernel realtime, si éste es muy adecuado para sistemas de escritorio?

Deja una Respuesta

El enlace de tu firma no es válido para los buscadores. Cualquier intento por tu parte de hacer spam no tendrá el resultado esperado. Haz un comentario interesante y contribuye a la discusión.