Recompilacion del Kernel

 

En esta ocasión practicaremos con el kernel, nuestra misión es recompilarlo y que funcione correctamente.

La recompilacion del kernel no nos va a aportar mayor rendimiento, recompilando el kernel tendremos la oportunidad de acomodarlo a nuestra maquina. No tenemos que utilizar todos los componentes de kernel porque si tan solo los que nos hagan falta. Pondré un ejemplo más entendible, si mi maquina no tiene bluethooth, ni lo va a tener, para que quiero yo un kernel donde se de soporte al bluetooth, tan solo hará que mi kernel sea más pesado o que reserve memoria que nunca se usara.

Recompilar el kernel es una opción que tenemos que pensar si nos conviene o no ya que si lo hacemos mal podemos quedarnos sin sistema porque este no arranque. Como hemos dicho no nos va a dar mayor rendimiento aunque si puede ser que el ultimo kernel que haya de soporte a algún periférico que antes no había y por esa razón nos convendría recompilar.

Podremos tener tantos kernel como queramos, si uno nos funciona mal podremos volver al anterior si hacemos las cosas con cuidado.

A continuación veremos cómo compilar nuestro kernel desde 0 ya que utilizaremos una maquina limpia para ello. Veremos cómo podemos modificarlo a nuestro gusto quitando y poniendo diferentes opciones dentro del kernel o sacándolas a módulos.

Una vez que ya tenemos nuestra maquina debían arrancada entraremos en una Shell como podemos ver en la imagen inferior.

clip_image002

Una vez en la Shell veremos que kernel estamos utilizando, para ello tendremos que teclear úname – a y pulsar intro

clip_image004

Como podemos observar estamos utilizando el kernel 2.6.26-2-686

Una vez que ya sabemos cuál es nuestro kernel bajaremos las fuentes del kernel para realizar la compilación, en este caso recompilaremos nuestra misma versión del kernel.

Para ello introduciremos la siguiente sentencia

Aptitude search Linux-source |grep 2.6.26

Mediante este comando estamos diciendo que estamos buscando el código fuente de Linux y que de todo lo que encuentre filtre por 2.6.26

clip_image006

Como podemos observar en la imagen superior vemos que tenemos una entrada, así que nos la instalaremos mediante el siguiente comando

Aptitude install Linux-source-2.6.26

clip_image008

clip_image010

Como podemos observar en la imagen superior si no somos root no va a funcionar esta instalación, así que para ello nos validaremos como root de la manera habitual.

Teclearemos su en la terminal e introduciremos la contraseña de root.

Una vez validados volveremos a ejecutar este comando tal y como vemos en las imágenes inferiores.

clip_image012

clip_image014

clip_image016

clip_image018

clip_image020

Parece que ha terminado la instalación de las fuentes. Buscaremos donde se encuentra ahora la instalación que acabamos de realizar. Nosotros sabemos que este tipo de instalación/descarga se guarda en /usr/src así que iremos a esta ubicación para ver que tenemos

Teclearemos en nuestra Shell /usr/src

clip_image022

Si realizamos un ls podemos ver nuestro paquete recién descargado. Pero como podemos observar esta comprimido así que tendremos que descomprimirlo.

clip_image024

Descomprimiremos nuestro fichero con la siguiente orden

Tar –xvjf Linux-source-2.6.26.tar.bz2

clip_image026

clip_image028

clip_image030

Vemos como se va descomprimiendo el fichero…….

clip_image032

Como podemos observar hemos vuelto a tomar el control de la maquina así que ahora realizaremos un ls de esta carpeta para ver como la tenemos.

clip_image034

Podemos observar que disponemos de la misma información ya que en un directorio esta Linux-source… y además disponemos del mismo directorio comprimido en un tarball así que si queremos podremos eliminar nuestro fichero tar mediante el comando rm.

clip_image036

Si realizamos un ls veremos que solo tenemos la información que nos interesa.

clip_image038

Vamos a realizar un ls del único directorio que tenemos

clip_image040

clip_image042

Podemos observar el interior del directorio, vemos como está el fichero makefile que modificaremos a continuación. En este fichero se indica que la ruta donde se encuentran todos los ficheros es /usr/src/Linux pero como podemos observar no es así. En vez de copiar todos los ficheros vamos a realizar un enlace simbólico como el siguiente.

Ln –s Linux-source /usr/src/linux

clip_image044

De esta manera no tendremos ningún problema al comenzar la compilación porque ya existe la ruta que se indican en la configuración de la recompilacion.

Si realizamos ahora un ls de nuestra carpeta deberíamos de tener un enlace simbólico y el directorio.

clip_image046

Ya disponemos de casi todo lo necesario para compilar el kernel pero nos falta saber si tenemos las build essential y alguna librería que siempre se suele pedir al realizar este tipo de tareas.

Para ver si disponemos de las build esentials teclearemos aptitude search build essential

clip_image048

Parece que lo tenemos como paquete, procederemos a la instalación mediante el comando aptitude install build-essential

clip_image050

clip_image052

Una vez acabas de instalar las build essential buscaremos las librerías ncurses para ello realizamos la misma operación

clip_image054

Como podemos observar tenemos 2 paquetes por instalar y que son los que nos interesan ya que queremos que sean las que finalicen en dev ya que estos paquetes incluyen funciones avanzadas destinadas a desarrollo e implementación.

Instalaremos ambos paquetes mediante aptitude install libncurses5-dev

clip_image056

clip_image058

Parece que se ha instalado correctamente, haremos lo mismo con el otro paquete

Instalaremos mediante aptitude install libncursesw5-dev

clip_image060

clip_image062

Parece que ha funcionado correctamente, ahora instalaremos las librerías qt3-devtools

Para ello buscaremos de nuevo librerías, en este caso qt3

Aptitude search qt3

clip_image064

Podemos observar que las qt3-dev-tools están sin instalar así que procederemos a su instalación

Instalaremos mediante aptitude install qt3-dev-tools

clip_image066

clip_image068

Podemos ver en la imagen superior el final de la instalación de esta herramienta.

Ahora sí que parece que disponemos de todo lo necesario como para empezar a jugar con nuestro kernel así que allá vamos.

Como hemos dicho antes modificaremos nuestro makefile, para ello nos meteremos dentro del directorio Linux (estamos en /usr/src/) y teclearemos nano Makefile

clip_image070

clip_image072

clip_image074

Modificaremos la extraversión y el nombre para luego no confundirnos y que este además identificada.

clip_image076

Guardaremos ahora nuestro fichero con control +x

Para configurar el kernel a nuestro gusto podremos utilizar 3 programas como son

· Config à Te realiza muchísimas preguntas, tras utilizarlo seguramente tu sistema no arranque o no funcione muy bien

· Menuconfigàsin entorno grafico, utilizaremos este

· XconfigàNecesitamos entorno grafico, parece más complejo que menuconfig.

Si tecleamos en la consola dentro de la carpeta Linux el comando make config o make menuconfig o make xconfig nos aparecerán los diferentes programas de configuración.

En nuestro caso teclearemos make menuconfig oldconfig.

Mediante este comando arrancamos el programa de configuración y además añadimos la configuración de nuestro kernel actual ya que los kernel suelen venir configurados por defecto para que se utilicen en muchos sistemas e igual no nos interesa eso además puede que nosotros hayamos realizado algún cambio y no queremos que se nos toque nada o no queremos volver a modificarlo a mano.

clip_image078

clip_image080

Se van cargando los diferentes scripts….

clip_image082

Finalmente nos aparece el programa de configuración

En este caso vamos a modificar alguna cosa para que el kernel sea diferente del que ya tenemos así que nos meteremos en la opción de networking

clip_image084

Pulsaremos intro y volvemos a dar intro al posicionarnos en networking options

clip_image086

clip_image088

Meteremos este modulo en el kernel pulsando la tecla y entonces se marcara la opción con un asterisco

clip_image090

Quitaremos ahora del kernel el soporte de ipv6 porque en este momento no se usa y no se usara después tampoco.

clip_image092

Vemos que esta como modulo. Nos da igual porque no queremos que este.

Pulsamos la n

clip_image094

Ahora pulsaremos un par de veces exit

clip_image096

Cuando pulsamos exit por 3 vez nos aparece esta pantalla, pulsamos sobre si para que guarde la configuración que acabamos de poner.

clip_image098

clip_image100

Vemos como se ejecuta la orden y como se guarda la configuración en .config.

Escribiremos less .config para ver el fichero a modo de curiosidad

clip_image102

Podemos comprobar que aquí es donde se genera la configuración para nuestro kernel y que es para la versión Ivan ya que antes hemos modificado el makefile.

Una vez que ya hemos terminado de configurar el kernel tendremos que crear la imagen con la cual arrancaremos el sistema, para llevar a cabo esta acción teclearemos lo siguiente

Make bzImage

clip_image104

Pulsaremos intro para que comience a crearla, este comando nos genera la imagen del kernel comprimida.

clip_image106

clip_image108

Tras dejar unos minutos que se genere la imagen ya la tenemos lista, en la imagen superior podemos ver donde se ha creado.

Una vez terminada la imagen tendremos que compilar los módulos ya que no siempre los mismos “paquetes” son módulos. Unas veces van dentro del kernel y otras fuera.

Para realizar este proceso tendremos que ejecutar la orden make modules

clip_image110

clip_image112clip_image114 clip_image116

clip_image118

clip_image120

Tras un largo rato ha terminado ahora una vez compilados los módulos procederemos a copiar los módulos a la carpeta /lib/modules mediante la opción make modules_install

clip_image122

clip_image124 clip_image126

Este proceso ha tardado un poco menos. Hemos visto que este proceso crea una carpeta en /lib/modules, veamos si es cierto.

Ls /lib/modules

clip_image128

Podemos comprobar que parece que si es ya que tenemos un directorio llamado 2.6.26Ivan.

Con este directorio vamos a construir nuestro initramfs que es un pequeño sistema de archivos que cargamos en memoria para iniciar nuestro sistema operativo, de esta manera el primer proceso del sistema es init cuyo pid es 1 tras iniciarse este proceso continuara la carga de nuestro sistema operativo.

Tendremos que escribir la siguiente orden

Mkinitramfs –o /boot/initrd.img-2.6.26-ivan /lib/modules/2.6.26Ivan

clip_image130

clip_image132

Mediante este comando estamos generando nuestro sistema de ficheros con el contenido de la carpeta 2.6.26ivan y lo estamos depositando en la carpeta boot con el nombre initrd.img-2.6.26-ivan

Nos hará falta también poner en este directorio (/boot) tanto la imagen del kernel comprimido que hemos creado al principio como un fichero llamado system.map que contiene los mapeos de irq para poder gestionar las interrupciones desde el so.

En primer lugar haremos una copia de nuestra imagen del kernel que se encuentra en el siguiente directorio /usr/src/Linux/arch/i386/boot/bzimage.

Vamos a comprobar que el fichero bzimage se encuentra en este directorio.

clip_image134

Parece que sí, aunque si mejoramos nuestro ls…

clip_image136

Veremos que el lugar donde se encuentra nuestro fichero bzimage es en realidad un enlace y que realmente se encuentra en arch/x86/boot/bzimage

clip_image138

Una vez que hemos visto donde se encuentra nuestro fichero bzImage realizaremos la copia

Cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.26-ivan

clip_image140

clip_image142

Si realizamos un ls de /boot deberían de aparecer los dos ficheros que hemos creado

Ls –l /boot

clip_image144

Como podemos comprobar están los ficheros que hemos generado.

Por último nos falta copiar en esta carpeta el fichero system.map que se encuentra en /usr/src/Linux/ y que se ha generado tras todo el proceso en el cual se incluyen los mapeos de irq gestionables desde so

Lo haremos con el siguiente comando.

Cp system.map /boot/system.map-2.6.26-ivan

clip_image146

clip_image148

Podemos comprobar que se también se ha copiado ok este fichero. Ya tenemos los 3 ficheros generados perfectamente para arrancar nuestro sistema operativo con este kernel pero………….como le decimos que inicie con este kernel?

Tendremos que modificar nuestro gestor de arranque,grub. Teclearemos en nuestra Shell lo siguiente

Nano /boot/grub/menú.lst para que podamos configurar grub para que arranque con este nuevo kernel

clip_image150

Nos desplazaremos hasta el final del fichero y nos encontraremos con algo similar a la imagen inferior

clip_image152

Añadiremos otra entrada , para ello escribiremos lo siguiente antes de ### END DEBIAN……

Title Debian Gnu/Linux, kernel 2.6.26 ivan

Root (hd0,0)

Kernel /boot/vmlinuz-2.6.26-ivan root=/dev/sda1 ro quiet

Initrd /boot/initrd.img-2.6.26-ivan

Nuestro fichero quedara similar al de la imagen inferior

clip_image154

Guardaremos ahora el fichero con control+x y reiniciaremos nuestro sistema para probar que funciona correctamente.

clip_image156

Tras el reinicio seleccionaremos la nueva línea que acabamos de crear en grub y pulsamos intro.

clip_image158

Como podemos observar en la imagen inferior el sistema arranca de manera normal

clip_image160

Si introducimos en nuestra Shell el mismo comando que al principio del ejercicio (úname –a) nos debería de decir que el kernel que estamos usando es el que hemos recompilado

clip_image162

Como podemos observar parece que estamos en lo cierto y que nuestra practica ha ido bastante bien.

Si recordamos la configuración del kernel, habíamos quitado el soporte a ipv6 así que si realizamos un ifconfig ( nos habremos validado como root) no debería de aparecer información relativa a ipv6. Comprobémoslo

clip_image164

clip_image166

clip_image168

Como podemos observar no aparece nada relativo a ipv6.

Si reiniciamos el sistema y volvemos a arrancar con el kernel original y hacemos la misma prueba debería de aparecer la información relativa a la versión 6 de ip. Vamos a comprobarlo.

clip_image170

clip_image172

Podemos comprobar cómo una vez reiniciado el sistema y vuelto a escribir úname –a nos dice que nuestro kernel es el original.

Si ahora nos validamos como root y hacemos un ifconfig nos debería de salir ipv6

clip_image164[1]

clip_image166[1]

clip_image174

Como podemos comprobar aquí si hay soporte de ipv6 así que esto demuestra que nuestra práctica ha salido bien.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload the CAPTCHA.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.