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.

www.kernel.org

  • 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:

ckernel01

ckernel02

ckernel03

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)

ckernel04

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

  • Yahoo Mail
  • Facebook
  • Twitter
  • Windows Live Spaces
  • Delicious
  • Share/Bookmark

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.

14 comentarios »

 
  • vivaldis dice:

    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.

  • vivaldis dice:

    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

  • vivaldis dice:

    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.

  • oaky dice:

    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

  • Cristian dice:

    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!

  • Cristian dice:

    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

  • Cristian dice:

    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

  • Cristian dice:

    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

  • cristian dice:

    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.

 

Deja un comentario

XHTML: Puedes usar las siguientes etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>