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