Cómo compilar nuestro propio Kernel RT en .deb
Vamos a hacer una compilación de un Kernel Real Time para Debian Lenny, y trabajaremos con la última versión estable. Para ello detallaremos paso a paso el procedimiento para terminar dejando dos paquetes .deb instalables. Los pasos son los siguientes:
- Primero debemos bajar fuentes del kernel desde www.kernel.org, elegimos la última versión estable.

- Luego descargamos el parche para tiempo real (Patch RT), desde aquí, eligiendo el número de versión que coincida con la fuente del kernel que bajamos (ej: kernel 2.6.29.7 / patch 2.6.29.7).
- También tenemos que instalar unos paquetes para poder realizar la compilación:
# aptitude install kernel-package libncurses5-dev
Suponiendo que descargamos la fuente del kernel (en tar.bz) y el patch (en .gz) en el escritorio, abrimos una consola y como usuario root copiamos los archivos descargados al directorio /usr/src:
# cp /home/usuario/Desktop/linux-2.6.31.4.tar.bz /usr/src/ # cp /home/usuario/Desktop/patch-2.6.31.4-rt14.gz /usr/src/
- Vamos hasta el directorio y descomprimimos el kernel y el patch:
# cd /usr/src # tar jxvf linux-2.6.31.4.tar.bz # gunzip patch-2.6.31.4-rt14
- Creamos un enlace simbólico:
# ln -s /usr/src/linux-2.6.31.4 /usr/src/linux
- Vamos hasta la ruta apropiada y aplicamos el parche:
# cd /usr/src/linux/ # patch -p1 <../patch-2.6.31.4-rt14
- Una vez aplicado el parche, ejecutamos el menú de configuración, donde cambiaremos algunos valores:
# make menuconfig
- En el menú modificamos los siguientes valores:
Processor type and features > Preemption Mode: Real Time (Esto nos aparecerá si tenemos el parche instalado)
Processor type and features > Timer frequency: 1000 Hz (Útil para cuando trabajemos con Rosegarden)
Processor type and features > Processor Family: Pentium4 (Elegimos el tipo de microprocesador, según sea nuestro caso)
Kernel hacking > Tracers: Desactivado. En los Kernels nuevos, esta opción viene activada por defecto, debemos deshabilitarla sí o sí para tener un rendimiento óptimo en el sistema, de lo contrario nos dará una advertencia en la carga del Kernel.
Además, podemos desactivar el OSS (Device Drivers > Sound) , ya que no se usa, o podemos activar los módulos de ALSA dedicados al USB-Audio (Device Drivers > Sound). Es muy importante recordar tildar las opciones del driver Alsa y el modelo del chip de nuestra placa, por ejemplo en el caso de las m-audio de la serie delta: ICE1712 [Envy24].
Hay muchas opciones para desactivar y optimizar el kernel pero depende absolutamente del hardware de la computadora de cada uno y el conocimiento que tengamos de él y de que conozcamos el nombre exacto del módulo que el kernel le asigna.
Finalmente salimos pulsando sobre Exit y guardamos el fichero aceptando la pregunta.
- Compilamos el nuevo kernel y generamos los paquetes .deb con el comando make-kpkg:
# make-kpkg clean # make-kpkg --append-to-version=-soundebian-rt --initrd kernel_image kernel_headers
Explicación de la sintaxis:
–append-to-version: es el nombre de la versión tendrá el kernel (ej: 2.6.31.5-soundebian-rt)
kernel_image: indica que compile la imágen del kernel.
kernel_headers: indica que compile los headers del kernel.
Luego de ejecutar este comando, se compilará el kernel, este proceso tardará un buen tiempo y depende de la velocidad de nuestro procesador.
- Una vez terminado el proceso podemos instalar los paquetes:
# dpkg -i *.deb
Para equipos con mas de un procesador, podemos ejecutar el siguiente comando antes de compilar para reducir el tiempo aprovechando mejor los núcleos (declara una variable con el número de procesadores que tengamos):
# export CONCURRENCY_LEVEL=`expr $(cat /proc/cpuinfo |grep -i ‘MHz’|wc -l) + 1`
Para mas información, pueden visitar el FAQ del Kernel donde se amplían los conceptos básicos para conocer mas en detalle qué es cada cosa que modificamos.
Esperamos que esto sea de utilidad, y si quieren compartir con nosotros sus adelantos… bienvenidos!!
Envíennos sus dudas y comentarios como así también sus propias compilaciones para poder compartirlas.
Problemas con la instalación del driver privativo para placas nvidia:
Gracias a Cristian, nos dimos cuenta que los últimos drivers de nvidia tiran error al compilarse, para resolver esto podemos seguir los pasos detallados en esta web: http://www.nvnews.net/vbulletin/showthread.php?t=153770
En resumen sería:
1) Descomprimir el driver:
./NVIDIA-Linux-x86-256.44.run -x
2) Aplicamos el parche que descargamos desde aquí. Y lo copiamos al directorio donde extraímos el driver:
<directorio en el que extraímos>/NVIDIA-Linux-x86-256.44/kernel
3) Vamos hasta el directorio y ejecutamos el patch:
patch < p.patch
4) Ahora desde el directorio en el que extraimos ejecutamos:
./nvidia-installer -K --kernel-name=2.6.33.7-rt29

The Cómo compilar nuestro propio Kernel RT en .deb by SounDebian, unless otherwise expressly stated, is licensed under a Creative Commons Attribution 2.5 Argentina License.
Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.




Hola!felicitarte por tu web! buenisssima iformacion.Mi SO ubuntu 10.04, 4g ram.amd62,y Linux 2.6.31-10-rt..deberia bajar solo el patch RT? perdona mi ignorancia, pero veo las posibilidades de ROSEGARDEN y perisito en linux, y tengo muchos claroscuros del SO.
En cuanto a http://www.kernel.org parece un poco lioso encontrar el patch a alguna cosa parecido con “RT”.
Gracias
salud.
Hola!felicitarte por tu web! buenisssima iformacion.Mi SO ubuntu 10.04, 4g ram.amd62,y Linux 2.6.31-10-rt..deberia bajar solo el patch RT? perdona mi ignorancia, pero veo las posibilidades de ROSEGARDEN y perisito en linux, y tengo muchos claroscuros del SO.
En cuanto a http://www.kernel.org parece un poco lioso encontrar LA RUTA a alguna cosa parecido con “RT”.
Gracias
salud
Hola vivaldis!! Muchas gracias por la felicitación, este blog lo armamos juntos Esteban Segreto y quien escribe Gabriel Ferreira, los parches para el kernel rt los descargás de aquí:
http://www.kernel.org/pub/linux/kernel/projects/rt/
pero también podés instalar el kernel genérico realtime de tu sistema GNU/Linux Ubuntu sin necesidad de compilar y va funcionar de maravillas, busca entro los paquetes de tu repositorio el kernel rt, esto lo podés hacer con el gestor de paquetes synaptics e instalarlo desde la misma aplicación, cualquier cosa pregunta de nuevo.
Salud
gracias gabriel, a ti y a esteban, no sabes el alegron que tengo de haver encontrado vuestra web, seguro que le voy hacer un repaso a fondo , poco a poco..mi objetivo es trabajar con ROSEGARDEN, soy de la vieja escuela pero me gusta la modernidad, y ando un poco mal de “plata”..SOLUCION:GNU/LINUX Y SU MARAVILLOSO ENTORNO.
gracias.
Gracias por la calidad de sus manuales, les dejo imagen y headers rt que he compilado en debian squeezy corriendo en mi dell inspiron 1520 y van muy bien
http://dl.dropbox.com/u/9322116/linux-headers-2.6.33.6-rt262.6.33.6-soundbelow-rt-_i386.deb
http://dl.dropbox.com/u/9322116/linux-image-2.6.33.6-rt262.6.33.6-soundbelow-rt-_i386.deb
Hola buenisima la pagina.
Mi pregunta es la siguiente si compilo el kernel real-time se puede usar este mismo kernel para las demas tareas como por ejemplo juegos?
Hola Cristian, muchas gracias!. Te cuento con placas aceleradoras intel no hay problema ya que el driver libre soporta aceleración hardware, pero no he probado nunca tratar de instalar el driver nvdia (privativo) en un kernel real time, he escuchado que puede haber problemas, Esteban seguro que puede responder esto, ya que él usa nvidia, voy a pedirle que te conteste siempre que sea esto lo que necesites, no sé que placa de video tenéis. Por lo demás no existe ningún problema para jugar, ya que no usarías el servidor de audio en tiempo real “jackd” mientras juegues, solo “alsa”. Saludos!
Hola Cristian,
te comento que es posible instalar un Kernel RT + el driver Nvidia.
Siempre tenes que tener instalados los “Headers”, es decir, cuando instales, instalás el kernel-image y el kernel-headers.
Eso servirá para que cuando bajes el driver nvidia, compiles el modulo necesario.
Un saludo y cualquier cosa aquí estamos!
hola gracias por responder
Si tengo una placa nvidia el mensaje anterior lo escribi antes de compilar el kernel
me creo estos paquetes, los cuales instale
linux-image-2.6.33.7-rt29_2.6.33.7-rt29-10.00.Custom_amd64.deb
linux-headers-2.6.33.7-rt29_2.6.33.7-rt29-10.00.Custom_amd64.deb
pero al querer instalar el driver de nvidia me salta el error
ERROR: Unable to build the NVIDIA kernel module.
Sabrian si me puede faltar instalar algun otro paquete?
Muchas gracias
Mira, una vez utilicé un comando que me tira muchos mas datos para debug,se llama “strace”.
Fijate si podes la instalación del driver con strace o alguna opción de debug para saber algún detalle mas, porque ese error es muy genérico.
Tirá por acá el error que lo vemos juntos
salu2
nvidia-installer log file ‘/var/log/nvidia-installer.log’
creation time: Tue Aug 10 23:20:39 2010
installer version: 256.44
option status:
license pre-accepted : false
update : false
force update : false
expert : false
uninstall : false
driver info : false
precompiled interfaces : true
no ncurses color : false
query latest version : false
OpenGL header files : true
no questions : false
silent : false
no recursion : false
no backup : false
kernel module only : false
sanity : false
add this kernel : false
no runlevel check : false
no network : false
no ABI note : false
no RPMs : false
no kernel module : false
force SELinux : default
no X server check : false
no cc version check : false
force tls : (not specified)
force compat32 tls : (not specified)
X install prefix : (not specified)
X library install path : (not specified)
X module install path : (not specified)
OpenGL install prefix : (not specified)
OpenGL install libdir : (not specified)
compat32 install chroot : (not specified)
compat32 install prefix : (not specified)
compat32 install libdir : (not specified)
utility install prefix : (not specified)
utility install libdir : (not specified)
doc install prefix : (not specified)
kernel name : (not specified)
kernel include path : (not specified)
kernel source path : (not specified)
kernel output path : (not specified)
kernel install path : (not specified)
proc mount point : /proc
ui : (not specified)
tmpdir : /tmp
ftp mirror : ftp://download.nvidia.com
RPM file list : (not specified)
Using: nvidia-installer ncurses user interface
-> License accepted.
-> Installing NVIDIA driver version 256.44.
-> Performing CC sanity check with CC=”cc”.
-> Performing CC version check with CC=”cc”.
-> Kernel source path: ‘/lib/modules/2.6.33.7-rt29/source’
-> Kernel output path: ‘/lib/modules/2.6.33.7-rt29/build’
-> Performing rivafb check.
-> Performing nvidiafb check.
-> Performing Xen check.
-> Cleaning kernel module build directory.
executing: ‘cd ./kernel; make clean’…
-> Building kernel module:
executing: ‘cd ./kernel; make module SYSSRC=/lib/modules/2.6.33.7-rt29/sourc
e SYSOUT=/lib/modules/2.6.33.7-rt29/build’…
NVIDIA: calling KBUILD…
make -C /lib/modules/2.6.33.7-rt29/build \
KBUILD_SRC=/usr/src/linux-2.6.33.7 \
KBUILD_EXTMOD=”/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel” -f /usr/s
rc/linux-2.6.33.7/Makefile \
modules
test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( \
echo; \
echo ” ERROR: Kernel configuration is invalid.”; \
echo ” include/generated/autoconf.h or include/config/auto.conf are
missing.”;\
echo ” Run ‘make oldconfig && make prepare’ on kernel src to fix it
.”; \
echo; \
/bin/false)
mkdir -p /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/.tmp_versions ; r
m -f /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/.tmp_versions/*
make -f /usr/src/linux-2.6.33.7/scripts/Makefile.build obj=/tmp/selfgz3464/N
VIDIA-Linux-x86_64-256.44/kernel
cc -Wp,-MD,/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/.nv.o.d -nos
tdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include -I/usr/src/linux-
2.6.33.7/arch/x86/include -Iinclude -I/usr/src/linux-2.6.33.7/include -incl
ude include/generated/autoconf.h -I/tmp/selfgz3464/NVIDIA-Linux-x86_64-256
.44/kernel -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fn
o-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-for
mat-security -fno-delete-null-pointer-checks -Os -m64 -march=core2 -mno-red-
zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-pro
tector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -pipe -Wno-sign-comp
are -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -
Wframe-larger-than=2048 -fomit-frame-pointer -g -Wdeclaration-after-statemen
t -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stac
k -I/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel -Wall -MD -Wsign-com
pare -Wno-cast-qual -Wno-error -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STR
ING=\”256.44\” -mcmodel=kernel -mno-red-zone -UDEBUG -U_DEBUG -DNDEBUG -DMO
DULE -D”KBUILD_STR(s)=#s” -D”KBUILD_BASENAME=KBUILD_STR(nv)” -D”KBUILD_MODN
AME=KBUI
LD_STR(nvidia)” -c -o /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/.tm
p_nv.o /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c
In file included from /usr/src/linux-2.6.33.7/arch/x86/include/asm/uaccess.h
:573,
from include/linux/poll.h:13,
from /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv-l
inux.h:84,
from /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c
:13:
/usr/src/linux-2.6.33.7/arch/x86/include/asm/uaccess_64.h: In function ‘co
py_from_user’:
/usr/src/linux-2.6.33.7/arch/x86/include/asm/uaccess_64.h:35: warning: compa
rison between signed and unsigned integer expressions
In file included from /tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c
:13:
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv-linux.h: At top level:
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv-linux.h:221: error: exp
ected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘
nv_spinlock_t’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv-linux.h:1366: error: ex
pected specifier-qualifier-list before ‘nv_spinlock_t’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c: In function ‘nv_al
loc_file_private’:
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2047: error: implicit
declaration of function ‘semaphore_init’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2048: error: ‘nv_fi
le_private_t’ has no member named ‘waitqueue’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2049: error: implicit
declaration of function ‘atomic_spin_lock_init’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2049: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c: In function ‘nv_ke
rn_poll’:
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2837: error: ‘nv_fi
le_private_t’ has no member named ‘waitqueue’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2840: error: implicit
declaration of function ‘atomic_spin_lock_irqsave’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2840: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2851: error: implicit
declaration of function ‘atomic_spin_unlock_irqrestore’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:2851: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c: In function ‘nv_po
st_event’:
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:4206: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:4223: error: ‘nv_fi
le_private_t’ has no member named ‘waitqueue’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:4224: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c: In function ‘nv_ge
t_event’:
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:4238: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:4241: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.c:4266: error: ‘nv_fi
le_private_t’ has no member named ‘fp_lock’
make[4]: *** [/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel/nv.o] Error
1
make[3]: *** [_module_/tmp/selfgz3464/NVIDIA-Linux-x86_64-256.44/kernel] Err
or 2
make[2]: *** [sub-make] Error 2
NVIDIA: left KBUILD.
nvidia.ko failed to build!
make[1]: *** [module] Error 1
make: *** [module] Error 2
-> Error.
ERROR: Unable to build the NVIDIA kernel module.
ERROR: Installation has failed. Please see the file
‘/var/log/nvidia-installer.log’ for details. You may find suggestions
on fixing installation problems in the README available on the Linux
driver download page at http://www.nvidia.com.
este es el error
Gracias por la ayuda
Cristian:
Parece que lo que hay que hacer es compilar el kernel con la opción “Paravirtualization Support” OFF.
Si no querés re-compilar, podés usar esta versión del driver: NVIDIA-Linux-x86-100.14.11-pkg1.run
Como explican en: http://www.esdebian.org/foro/19150/solucionadoinstalar-driver-nvidia-lenny
Sino, fijate también acá que está solucionado: http://crysol.org/node/737
contanos como te fue
salu2
Hola Muchas Gracias por la ayuda.
No pude hacer funcionar de esta manera la aceleracion, porque uso sitema de 64 bits, pero les comento: Navegando pro la red encontre un parche para aplicar a controlador NVIDIA-Linux-x86-256.44 para que funcione con el kernel 2.6.33.7-rt29.
Les dejo la direccion del enlace por si quieren hacer un post para solucionar este problema
http://www.nvnews.net/vbulletin/showthread.php?t=153770 (el usuario cr1ogen soy yo, jeje)
Y no me hizo falta recompilar
Y desde ya gracias otra vez por ayudarme
Hola.
Vi que pusieron la solucion para la placa de nvidia
En el ultimo paso donde dice ejecutar:
./nvidia-installer -K –kernel-name=2.6.33.7-rt29
hay un error que el muchacho no se habra dado cuenta, pero la primera k (-K),
no va, porque da un problema de compilacion. En resumen seria asi:
./nvidia-installer –kernel-name=2.6.33.7-rt29
Y muchas gracias de nuevo.