Compilar un Kernel libre para Trisquel.

Hola, mi nombre es Kirthash y seré su guía en la compilación de un núcleo de GNU/linux 100% libre para la distribución Trisquel a la manera Debian ya que es la mas fácil. Existen muchas formas de hacerlo y bastante mas opciones que las que aqui narro pero no es el objetivo de este tutorial el servir de una guía completa. Para ello tenéis bibliografía de sobra.

Todos los comandos están explicados por si alguien tiene curiosidad.

La guía está pensada para aquellos que acaban de comenzar a usar los terminales y tienen algo de soltura en ellos. Se necesitan conocimientos detallados sobre el hardware que tiene el equipo.

¿Porque compilar un kernel o núcleo?

El kernel o núcleo, a partir de ahora lo llamaré kernel, es el centro de nuestro sistema operativo. Gracias a el obtenemos compatibilidades con el hardware, capas de abstracción, manejo de errores, planificación de procesos... y un largo etcétera.

El motivo por el que compilar un kernel es bien simple y nos servirá un ejemplo que siempre uso a quien me pregunta el por que me meto en estos berenjenales (que en realidad no es para tanto). Llevar una chaqueta comprada en cualquier tienda está muy bien, te puede quedar mejor o peor, mas holgada o menos...pero ten por seguro que igual que una chaqueta hecha a medida no compraras ninguna otra utilizando patrones genéricos.

Existen varios paquetes de kernel precompilados por la red y en los repositorios oficiales de Trisquel que pueden servir para el usuario poco explorador de las posibilidades que se le plantean. Es hora de dar un pasito mas, ¿no crees?. No te preocupes si fallas al compilar tu primer núcleo, todos metemos la pata al principio, pero siempre podrás hacer uso de los precompilados para volver a configurar tu propio núcleo para poder probarlo de nuevo.

Con esto claro ya podemos hacer las cosas tal y como dijo Jack el Destripador. "Vayamos por partes"

¿Que necesitamos?

En primero lugar tiempo si es nuestra primera compilación ya que no encontraremos las opciones rápidamente.

Un buen café o té para deleitarnos mientras se compila.

Descargas que necesitaremos y otras herramientas

Aunque en todo momento usaré el terminal, se puede hacer estos pasos utilizando el synaptic.

En primer lugar necesitaremos las telas y las tijeras que usaremos. Abriremos un terminal.

Tecla alt+F2 y escribimos gnome-terminal(en Gnome) o konsole(KDE).

Se nos abrirá la consola y escribimos sin miedo lo siguiente.

 sudo -s
Nos logeamos como superusuarios, de ese modo no tenemos que poner sudos en cada comando.
 apt-get -y install kernel-package libncurses5-dev
Instalamos los dos paquetes que necesitamos para una compilación tipo Debian.

Mientras descarga e instala esos paquetes sería conveniente ir descargando el codigo fuente del nucleo desde esta página. Es muy aconsejable utilizar la última versión. En este momento es la 2.6.30.5-libre cuyo código fuente está en el archivo llamado linux-2.6.30.5-libre.tar.bz2

Suponiendo que se ha descargando en el Escritorio, cuando los programas se hayan instalado introducir el siguiente comando. (el ~ se escribe con altgr+ñ)

 tar xvf ~/Escritorio/linux-2.6.30.5-libre.tar.bz2 -C /usr/src/
Descomprimimos el archivo del código fuente en la carpeta /usr/src/. Si se omite la v la descompresion será mas rápida pero si falla no lo sabremos, por ello es recomendable. El "~" es un simbolo que representa el directorio personal del usuario activo en ese momento. En mi caso es equivalente a poner /home/kirthash
 cd /usr/src
 ln -s linux-2.6.30.5-libre linux
 cd linux
El primero nos lleva al directorio en cuestion y el segundo crea un enlace, similar a un acceso directo llamado linux.

Tomar las medidas al ordenador

Si no quieres complicarte la vida compilando el kernel, las opciones por defecto del que te has descargado deberia de funcionarte bien. Pero no sería muy diferente a usar uno precompilado. Si eres uno de estos pasa a la seccion de Compilación.

Bueno, comenzamos. Aqui poco os puedo ayudar. Depende de vuestro hardware pero os daré algunas indicaciones de donde teneis que fijaros. Yo suelo usar el lspci, lsusb y lsmod para saber que tengo y que estoy usando. Os enseñaré a mirar con buenos ojos estos comandos.

Haremos:

 lspci -k
Apuntaremos el nombre de los módulos(drivers) que usa nuestro hardware. Lo mas usual y necesario por saber es el módulo de la tarjeta gráfica, el de la tarjeta de red, wifi y sonido. En mi caso no tengo Wifi porque es un Pc de Sobremesa.

Los módulos que necesitaré en mi caso serán nvidiafb, atl2 y snd_hda_intel. El resto no los tocaremos no porque no se deban tocar, sino porque no creo que sea necesario profundizar mas por el momento.

También necesitamos saber cual es nuestro procesador/es. Es bastante importante ya que una de las mayores diferencias entre uno precompilado y el que crearemos radica en eso. Para ello haremos:

 cat /proc/cpuinfo
Las lineas mas importantes para nosotros son las que corresponden a "cpu family" y "model name". Tambien el numero de cpus que nos salen, lo usual son 1, 2 o 4.

Configuracion del Nucleo

Escribimos dentro del directorio /usr/src/linux el siguiente comando:

 make-kpkg clean
Limpia el código fuente de archivos temporales en alguna anterior compilacion. No es necesario para un kernel recien descargado.

A pesar de que existen otras interfaces para configurarlo usaré las ncurses, a mi parecer, ya que no necesita tener las X abiertas. Para ello ya que tenemos instalada la librería echaremos a andar la interfaz.

 make menuconfig
El interfaz es simple. Con las teclas de dirección arriba y abajo resaltamos lo que queremos cambiar, con las teclas izquierda y derecha podremos servirnos de archivos de ayuda, salir o seleccionar lo que tengamos resaltar. Con la tecla n desactivamos, con espacio seleccionamos como módulos (M) o incrustado en el kernel (*). En caso de poder elegir elegiremos siempre por defecto como módulo.

Es importante recordar que si no sabéis que estáis cambiando no lo cambiéis porque podéis compilar un kernel inestable.

Ahora iremos cambiando algunas opciones de arriba hacia abajo.

Processor type and features

Entramos en el y buscamos la opción Processor family y podremos elegir nuestro tipo de procesador(presionar espacio). Lo mas comun son:

Intel Dual Core 2 y Atom: Core 2/newer Xeon Intel Pentium 4: Pentium-4/Celeron (P4-based)/Pentium-4 M/older Xeon (genéricos para los pentium)

En caso de duda siempre puede utilizar la ayuda que se ofrece para buscar cual tienes que elegir por el cpu family que hemos apuntado antes.

En Maximun number of CPUs poner el numero de CPUs que tenéis en vuestro equipo

En Timer frequency podremos elegir según el uso del mismo pc. Lo usual es 300 o 1000 Mhz que corresponde a un equipo multimedia. Si es un servidor elegir 200 Mhz.

Ya podemos salir del mismo seleccionando exit con los botones izquierda y derecha y presionar enter.

Device Driver

Este es el apartado que mas tiempo nos llevará. Aquí usaremos lo que encontramos con el comando lspci -k.

Solo desactivaremos los módulos de los dispositivos que sabemos que no tenemos. Un ejemplo claro es que si tenemos una tarjeta gráfica NVIDIA podremos desactivar los de ATI o de INTEL. Si no encontramos nuestro dispositivo es mejor activarlo todo como modulo y alguno será el que necesitamos seguro.

Comencemos a movernos por los menús.

Network Device

Las opciones de Ethernet están divididas según la velocidad de la tarjeta de red. Si no la sabemos tendremos que ir una a una hasta encontrar nuestra tarjeta de red utilizando o bien el nombre de la tarjeta o bien en la ayuda de cada dispositivo te dice como se llama el módulo. En mi caso atl2 que se encuentra en Ethernet (10 or 100Mbit), desactivo el resto y dejo como módulo Atheros L2 Fast Ethernet. Desactivo a su vez directamente tanto los Ethernet 1000 como los 10000 ya que mi tarjeta se que no estará ahí.

Para la wifi entraremos en la opción de Wireless Lan y dejaremos activa Wireless LAN (IEEE 802.11) y buscaremos de nuevo nuestro dispositivo desactivando el resto siempre que sea del tipo modulo.

Una vez terminemos salimos de estos menus y seguimos con otros tipos de dispositivos.

Graphics Support

Entramos en AGP support y dejamos seleccionado únicamente el de nuestra tarjeta gráfica. En caso de duda ya sabéis, no toquéis nada.

Salimos y entramos en Support for frame buffer devices. Aquí desactivaremos todos salvo Userspace VESA VGA graphics Support y el de nuestra tarjeta gráfica. En mi caso "nVidia Framebuffer support". Si se quiere utilizar los drivers privativos sería de forma distinta, pero por la filosofía de la distribución no lo diré.

Sound Driver

Tenemos dos opciones nada mas entrar, lo usual es quitar las de abajo ya que son soportes para tarjetas muy antiguas, pero si alguien las necesita podeis dejarlas. Lo normal es que nuestra tarjeta de sonido este en PCI (aunque esté integrada en placa) y en los 4 ordenadores que he compilado núcleos todos usan el mismo modulo, snd_hda_intel, que corresponde a la opción Intel HD Audio. El resto podéis desactivarlo.

x86 Platform Specific Device Drivers

Aquí si tenéis un portátil podéis desactivar el que no tengáis y activar solo el que necesitéis. Por ejemplo, si tenéis un portátil ACER dejáis como modulo Acer WMI Laptop Extras y desactiváis el resto.

File system

Aquí elegiremos los que usaremos. Yo suelo usar siempre los ext (como casi todo ser humano en linux) y el resto suelo obviarlo, por ello se puede activar ext2, ext3 y ext4 como módulo y el resto desactivarlo. Solo aquello que te permita ponerlo como módulo, esto se ve porque el cuadrito no es [ ] sino que es < >. El resto mejor no tocarlo. En las opciones DOS/FAT/NTFS conviene activarlo todo si usáis pendrives en FAT32 o el equipo comparte linux y windows simultaneamente.

Y con esto habremos terminado de optimizar (aunque sea un poquito) nuestro kernel.

Compilar nucleo

Una vez que tenemos todos las opciones elegidas podemos salir del interfaz, se nos guardará por defecto la configuracion en un archivo de texto llamado .config

De nuevo en la consola escribimos lo siguiente

 make-kpkg --initrd kernel_image kernel_headers
Creará archivos de instalación Debian de nuestro kernel y sus cabeceras que podrían sernos útiles.

Ahora es el momento de irnos a tomar un café, un té o cualquier cosa...porque estará compilando un buen rato. Depende de la máquina que tengas y la de módulos que le hayas añadido. Lo usual es que roce la hora.

Instalacion del kernel

Los archivos Debian los creará en /usr/src por lo que escribiremos lo siguiente en la consola.

 cd /usr/src
 dpkg -i *.deb
Y con ello ya tendremos instalados ambos paquetes. Usualmente no hace falta pero por si acaso haremos:
 update-grub
Y podremos reiniciar el sistema e iniciarlo utilizando el nuevo kernel. Por comandos:
 init 6
Si después de reiniciar has conseguido cargar el escritorio. Enhorabuena, has hecho lo mas difícil, evitar que te salga un kernel panic. Ya puedes probar tus dispositivos para ver como funcionan y si alguno no lo detecta es porque el módulo que elegiste no era el suyo así que tendrás que volver a configurarlo (iniciando desde el núcleo antiguo, que aun seguirá intacto y funcional), compilar e instalarlo. Aunque antes tendrás que desinstalarlo con
 dpkg -r nombre_del_nucleo_image nombre_del_nucleo_headers
En ocasiones puede provocarse un kernel panic debido a que no se ha creado el archivo initrd así que tendremos que crearlo. Se haría con el comando:
 sudo mkinitramfs -o /boot/initrd-2.6.30.5-libre 2.6.30.5-libre
Gracias por haber leído este tutorial y espero que haya sido de ayuda.

Revisiones

09/05/2009 - 23:49
Kirthash
01/21/2011 - 14:17
anonymous