Ahora que ya sabemos como compilar programas en Ubuntu, vamos a aprender como se compila el kernel Linux.
Este tutorial esta basado en la traducción de Caribdis del HowTo en inglés publicado por steve en la wiki de Ubuntu.
Vereis que tampoco es tan dificil, aunque es verdad que si que es largo comparado con el tutorial nombrado antes pero con un poco de paciencia y práctica todo saldrá bien
. Este tutorial se compone de 5 pasos, los cuales paso a describir a continuación:
PASO 1
PREPARATIVOS
En primer lugar debemos de instalar los paquetes que contienen las herramientas necesarias para la compilación del kernel. Estos son el paquete build-essential y el kernel-package, para ello tecleamos en terminal el siguiente comando:
bash:$ sudo apt-get install build-essential kernel-package
PASO 2
CÓDIGO FUENTE
Podemos descargarnos el código fuente del kernel desde la web oficial www.kernel.org o desde los repositorios.
En los repositorios existen 2 paquetes el kernel-source y el linux-source. El primero es el kernel de Debian y el segundo el de Ubuntu. Nos lo descargamos con el comando:
bash:$ sudo apt-get install linux-source
Con esto se descargará el archivo linux-source-nº_de_version.tar.bz2 en el directorio /usr/src
Tecleamos el siguiente comando para entrar a ese directorio:
bash:$ cd /usr/src
Borramos el enlace llamado linux a un kernel anterior en caso de que lo hubiera:
bash:/usr/src$ sudo rm linux
A continuación descomprimimos el archivo donde esta guardado el código fuente:
bash:/usr/src$ sudo tar jxvf linux-source-XXX.tar.bz2
Sustituyendo XXX por el número de la version del kernel
De esta manera se crea un directorio que se llamará linux-source-XXX
Crearemos un enlace, al cual llamaremos linux, a dicho directorio:
bash:/usr/src$ sudo ln -s linux-source-XXX linux
Recuerda que debes sustituir en todo momento XXX por la versión del kernel que te has descargado.
PASO 3
CONFIGURACIÓN
Para configurar el kernel usaremos make menuconfig o make xconfig. Para el primero no hace falta tener instalado las Xwindow, y con make xconfig si.
Pero antes de instalarlos necesitamos una librería. El paquete libncurses5-dev (con todas sus dependencias) para los que instalarán make menuconfig y el paquete libqt3-dev (con todas sus dependencias) para los que instalarán make xconfig.
Instalar libncurses5-dev:
bash:/usr/src$ sudo apt-get install libncurses5-dev
Instalar libqt3-dev:
bash:/usr/src$ sudo apt-get install libqt3-dev
Bien para configurar el kernel usaremos una configuración base, esta será la del kernel que tenemos instalado por defecto. En el directorio /boot podemos encontrar un archivo con un nombre parecido a este config-2.6.8.1-3-386 logicamente, los digitos cambiarán según la versión del kernel instalado. Lo que haremos es copiar ese archivo (que contiene la configuración del kernel) al directorio /usr/src/linux-source-2.6.8.1, con el nombre .config:
bash:$ cd /usr/src/linux
bash:/usr/src/linux$ sudo cp /boot/config-2.6.8.1-3-386 .config
Recordad cambiar los números por la versión de vuestro kernel en particular
.
Ya con esto podemos hacer situarnos en el directorio /usr/src/linux y configurar las opciones que queramos del kernel con un sudo make oldconfig menuconfig o un sudo make oldconfig xconfig. Aquí hay que tener mucho cuidado de no cargarnos nada ya que esta es la parte delicada.
PASO 4
CONSTRUIR EL PAQUETE
Para construir el paquete con el que instalaremos el nuevo kernel vamos a usar el siguiente comando:
bash:/usr/src/linux$ sudo make-kpkg clean
bash:/usr/src/linux$ sudo make-kpkg –append-to-version=.XXXX –initrd kernel_image
Donde teneis que cambiar XXXX por una secuencia alfanumérica cualquiera, la que vosotros querais, pero sin usar la barrabaja (_) ni expresiones como “-386″, “-606″, “-K7″, “-sparc”, etc., porque expresiones similares son las usadas por los kernel precompilados de Debian y podrían inducir a error. Una solución recomendada es usar la fecha en que se compila
, por ejemplo:
bash:/usr/src/linux$ sudo make-kpkg –append-to-version=.191104 –initrd kernel_image
Suponiendo que hemos compilado el 19 de Noviembre de 2004.
La opción –initrd crea una imagen initrd en el directorio /boot.
No es imprescindible usarla siempre que a la hora de configurar el kernel hayamos incluido de forma estática (y no como módulos) los controladores para al menos nuestro bus, disco y sistema de archivos de nuestro directorio raiz. Pero es aconsejable usarla siempre. Pero para que funcione hay que aplicar a las fuentes del kernel el parche cramfs. Aunque, todos los kernel de Debian y de Ubuntu tienen ese parche ya aplicado por defecto. Pero es algo a tener en cuenta si se obtienen las fuentes en algún otro sitio. Por ejemplo de www.kernel.org.
Volviendo a la compilación, tras ejecutar el segundo comando de los 2 anteriores, nos saldrá un mensaje de aviso diciéndonos que la opción –initrd puede no funcionar. Se nos preguntará si queremos abortar el proceso. Como ya sabemos que a nosotros nos va a funcionar correctamente, contestamos que no.
Ahora se iniciará el proceso de compilación.
PASO 5
INSTALACIÓN DEL KERNEL
Tras el proceso de compilación se habrá creado un archivo llamado kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb en el directorio /usr/src. Dentro se encuentra nuestro kernel listo para instalar, lo cual ejecutaremos con el comando:
bash:/usr/src$ sudo dpkg -i kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb
Esta orden es equivalente a la más común make install, pero además se encarga de colocar en su sitio la imagen initrd y de actualizar el grub.
Finalmente, borramos el enlace que habíamos creado:
bash:/usr/src$ sudo rm linux
Con esto se terminó la compilación del kernel. Algo más laborioso pero no imposible