Ir al principioc | Ir al final
Home

TIC
TIC.CompilarNucleor1.6 - 27 Oct 2007 - 10:51 - RicardoDeLosSantosabajo

Start of topic | Skip to actions

CompilarNucleo

Introducción

Si disponemos de un hardware muy reciente o poco común es muy posible que el núcleo de nuestra distribución de Linux no lo reconozca adecuadamente. En esta situación podemos instalar el núcleo (y las librerías correspondientes) de otra distribución que sí reconozca nuestro hardware (como explicamos en InstalarNucleo). Otra posibilidad es instalar (usando synaptic o apt-get por ejemplo) un núcleo de los disponibles en el repositorio de Debian.

Una tercera opción consiste en descargar el código fuente del núcleo y compilarlo con las opciones concretas que necesitemos en nuestro caso. Eso es lo que explicamos a continuación.

Vamos a explicar cómo descargar e instalar el núcleo 2.6.x

¿Nos interesa siempre la última versión del núcleo?

Los drivers incluidos en cada versión oficial del núcleo también están disponibles en las sucesivas versiones. Sin embargo hay drivers programados por terceras personas y cabe la posibilidad de que sólo sean compatibles con determinadas versiones del núcleo. Por eso no siempre interesa la últina versión.

Requisitos previos

Antes de proceder a compilar e instalar el núcleo hay ciertos paquetes que debemos instalar (usando synaptic o apt-get, por ejemplo) en el sistema: libncurses-dev, kernel-package

Descargando y descomprimiendo el código fuente

El sitio oficial para descargar el código fuente del núcleo es http://www.kernel.org En este ejemplo vamos a descargar el código fuente del núcleo 2.6.17.14 comprimido en formato .tar.bz2 (archivo linux-2.6.17.14.tar.bz2)

A continuación descomprimimos el archivo que contiene en el código fuente en el directorio (que se supone que existe en nuestro sistema) /usr/src, por ejemplo, ejecutando comandos del tipo

bunzip2 linux-2.6.17.14.tar.bz2
sudo tar xf linux.2.6.17.14.tar -C /usr/src

Configurando el núcleo

Para configurar el núcleo nos situamos en el directorio donde hemos descomprimido el código fuente, que en nuestro caso es /usr/src/linux-2.6.17.14 y ejecutamos, en primer lugar, sudo make mrproper

Para no tener que configurar el núcleo desde cero, marcando absolutamente todas las opciones, podemos usar una de las siguientes alternativas:

  • Ejecutando sudo make defconfig. Esto nos crea un fichero de configuración (.config) con las opciones típicas para este núcleo seleccionadas.
  • Normalmente en /boot encontraremos un fichero llamado config-x-xx (donde x-xx indica la versión del núcleo actualmente instalado. Podemos copiar este fichero a /usr/src/linux-2.6.17.14/.config y usarlo como base para seguir configurando el nuevo núcleo.
    • Si usamos este procediento, antes de seguir con el paso siguiente deberíamos ejecutar make olconfig y pulsar INTRO en todas las preguntas que se nos planteen.

A continuación ejecutaremos sudo make menuconfig o sudo make xconfig según queramos trabajar en modo texto navegando con flechas (en un entorno tipo mc) o en modo gráfico. Para poder usar make menuconfig necesitaremos instalar previamente las librerías Ncurses (sudo apt-get install libncurses-dev)

sudo make mrproper
sudo make menuconfig

Compilando el núcleo

Una vez seleccionadas las opciones de configuración, al salir del programa de configuración, se creará o actualizará el fichero .config. Podemos crear una copia de seguridad de este fichero con un nombre distinto. Por ejemplo sudo cp .config version01.config

Ahora, para compilar el núcleo, ejecutamos sudo make

Creando paquete .deb para instalación del núcleo

Una vez finalizada la compilación del núcleo, podemos empaquetarlo en formato .deb con el comando

make-kpkg --initrd kernel_image

El paquete se genera en /usr/src y tiene un nombre del tipo kernel-image-2.6.17_10.00.Custom_i386.deb y podemos instalarlo con el comando dpkg -i kernel-image-2.6.17_10.00.Custom_i386.deb

¿Es necesario usar la opción --initrd?

El núcleo 2.6 contiene drivers específicos para las distintas controladoras de disco existentes actualmente. Si sabemos exactamente qué contraladora tiene nuestro equipo y compilamos el driver dentro del núcleo (no como módulo) entonces podremos prescindir de la opción --initrd.

Normalmente compilaremos como módulos los drivers correspondientes a todas las controladoras disponibles y con la opción --initrd haremos que se incluyan en un sistema initrd que se cargará en memoria durante el arranque del sistema y detectará nuestra contraladora de disco.

¿Y si el núcleo es 2.6.18 o posterior?

A partir de la versión 2.6.18 el servicio hotplug va incluido en el propio núcleo, de modo que tendremos que desinstalar el paquete hotplug. En Guadalinex V3 esto resulta problemático pues este paquete depende de otros esenciales para el sistema.

Instalando el núcleo empaquetado

Para instalar el núcleo empaquetado anteriormente, nos situamos en /usr/src y ejecutamos un comando del tipo

sudo dpkg -i kernel-image-2.6.18_10.00.Custom_i386.deb

Esta instalación copia el núcleo y el fichero initrd correspondiente a /boot y modifica automáticamente el gestor de arranque instalado (LILO o GRUB).

Nota: Si nuestro disco duro es SCSI o SATA, normalmente se identifica como un dispositivo /dev/sda en lugar del típico /dev/hda usado para discos IDE/ATA. En este caso recomendamos revisar el fichero /boot/grub/menu.lst generado pues hemos comprobado que a veces aparece hda donde debiera poner sda.

Compilando un núcleo para otra arquitectura (cross compile)

Cabe la posibilidad de que necesitemos compilar un kernel para otra arquitectura diferente a la que estamos usando. Por ejemplo, usando un PC (arquitectura i386) podemos compilar un kernel para hacer pruebas en un TomTom que usa arquitectura arm.

Lo primero que necesitamos es un cross compiler, que para el ejemplo que estamos usando aquí (compilamos para arquitectura arm usando una máquina con arquitectura i386) podemos descargar, en versión ejecutable, desde http://www.maintech.de/download/opentom/0.0.3/opentom-0.0.3.tar.bz2

El archivo comprimido contine el directorio cross, que copiaremos a /usr/local, por ejemplo.

Para compilar el kernel para la arquitectura arm, nos situamos en el directorio raiz del código fuente del núcleo y ejecutamos (suponemos que el shell usado es el habitual bash):

PATH=/usr/local/cross/gcc-3.3.4_glibc-2.3.2/bin:$PATH
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-

Enlaces relacionados

-- RicardoDeLosSantos - 17 Feb 2007

El pingüino ya no tiene frío


arriba

Estás aquí: TIC > InstalarNucleo > CompilarNucleo

arriba

Copyright © 2004 por los autores que han contribuido al desarrollo de esta web. Todos los materiales son propiedad de sus respectivos autores.
Para cualquier consulta o sugerencia contactar con TWiki.WebMaster