domingo, 5 de mayo de 2013

Compilar el último Kernel disponible en LMDE

Muchos de nosotros nos hemos encontrado con problemas a la hora de usar ciertas funcionalidades en nuestros sistemas Linux porque en el núcleo del sistema (Kernel) que estemos usando, estas funcionalidades están deshabilitadas por defecto para nuestra distribución...

Estas cosas suelen hacerlas los desarrolladores de las distribuciones para llegar al máximo público posible, ya que estos no usan los mismos dispositivos ni las mismas características de hardware... así que tienen que encontrar un equilibrio donde a veces no solo tienen que activar soporte para cientos de tipos de hardware... sino que en otras ocasiones tienen que desactivar funciones que entran en conflicto con otros dispositivos o equipos sacrificando estas mejoras para mantener el equilibrio anteriormente mencionado.

La solución pasa por parchear el Kernel o compilar uno nuevo para ajustarlo a nuestras necesidades.


En esta ocasión intentaré explicar como he compilado mi Kernel para obtener compatibilidad con laptop-mode-tools que se encarga de administrar la energía a partir de la obtención de eventos ACPI generados por el Portátil, cosa que en mi núcleo por lo que sea viene desactivado... y no tiene soporte para ACPI.

Preparativos

Ya que nos ponemos manos a la obra lo mejor es que nos descargamos el último Kernel disponible, ¿no?

Claro que si, pero el último estable, para no meter la pata.

Todos los núcleos de Linux hasta la fecha están en https://www.kernel.org/

Una vez descargado, (que será un archivo comprimido) lo normal para estos menesteres es descomprimir el código en /usr/src/

Obteniendo una carpeta con el nombre de kernel descargado.

Para hacerlo abrid una terminal.
Situaros en la ruta especificada:

cd /usr/src

Una vez allí copiáis el archivo descargado en mi caso es "linux-3.9.tar.xz":
sudo cp /home/tu-usuario/lugar-de-descarga/linux-3.9.tar.xz ./

Ya tenemos una copia en la ruta en la que nos encontramos, ahora toca descomprimirlo.
Este tipo de arvhivo, relativamente nuevo en Kernel.org se descomprime con:
sudo tar -Jxvf linux-3.9.tar.xz

Para poder hacerlo tendréis que tener instalado el paquete xz-utils, si no lo tenéis podéis instalarlo con:
sudo apt-get install xz-utils

Una vez descomprimido, encontraremos en la ruta en la cual nos encontramos una carpeta con el nombre que tiene el archivo comprimido pero sin la extensión ".tar.xz" donde deberemos entrar para continuar.

En mi caso:

cd linux-3.9

Lo lógico es que las fuentes de configuración estén limpias puesto que deben estar preparadas para su uso, pero si es la segunda vez que intentas compilar, lo mejor es que elimines los rastros de configuraciones antiguas.

make mrproper

Nota:  Regla mnemotécnica.....  notese que el comando dice "mr proper" el mítico producto de limpiezas de baños.... así que sería "hacer limpieza con mr proper" (hora se llama Don Limpio... jajajjaa que cutre... pero bueno)

Ahora toca configurar el núcleo de Linux, pero claro.... sería una ardua y compleja tarea dejar todo con la configuración de tu Kernel actual y añadir (o eliminar) después las configuraciones extra que necesites....

La solución es cargar la configuración actual y usarla como base. (Los nuevos kernels lo hacen de manera automática al abrir el configurador)

Como ya he dicho arriba, esto que a continuación se detalla en los nuevos kernels ya se hace de forma automática al abrir por primera vez el configurador del núcleo, por eso este apartado no es necesario que lo hagáis si estáis compilando un núcleo nuevo, pero por si queréis saber como hacerlo a mano.... o poner una config de un núcleo antiguo que funcionaba mejor... etc, etc allá va la explicación:

Cuando se instala un kernel, el archivo de configuración que se usó para compilarlo se copia en la carpeta /boot/ con un nombre que comienza con "config-" y seguido del numero de versión y arquitectura del kernel al que hace referencia.

Así que solo queda localizarlo, pegarlo en la caperta actual y usarla como base...

ls -al /boot/
config-3.2.0-4-amd64  initrd.img-3.2.0-4-amd64  System.map-3.2.0-4-amd64
extlinux              memtest86+.bin            vmlinuz-3.2.0-4-amd64
grub                  memtest86+_multiboot.bin  vmlinuz-3.9.0



En mi caso el archivo que busco es el config-3.2.0-4-amd64

Lo copiamos a la carpeta en la que nos encontramos con el nombre que debe tener para poder cargarlo correctamente... y posteriormente compilarlo.

sudo cp /boot/config-3.2.0-4-amd64 ./.config





Añadiendo o quitando funcionalidades

Con eso ya está todo listo.

Podríamos empezar a compilar el núcleo ya, sin mayores problemas, pero la cuestión es que tenemos un núcleo nuevo, si,  pero con las opciones como el viejo.. hay que entrar a la configuración del kernel que estamos construyendo y añadir o eliminar lo que no queramos.
En mi caso, lo compilé añadiendo estas opciones mínimas que recomiendan en la página de gentoo para hacer funcionar correctamente el "laptop-mode-tools":

General setup --->
  [*] Configure standard kernel features (expert users) --->

Power management and ACPI options --->
  [*] Run-time PM core functionality
  [*] ACPI (Advanced Configuration and Power Interface) Support --->
    <*> AC Adapter
    <*> Battery
    -*- Button
    -*- Video
    <*> Fan
    <*> Processor
    <*> Thermal Zone
    [*] Power Management Timer Support

  [*] CPU Frequency scaling --->
    [*] CPU Frequency scaling
    <*>   'performance' governor
    <*>   'powersave' governor
    <*>   'userspace' governor
    <*>   'ondemand' governor
    <*>   'conservative' governor
    <*> ACPI Processor P-States driver
 
Fuente de información: http://www.gentoo.org/doc/es/power-management-guide.xml
Recomendada su lectura si queréis instalar laptop-mode-tools



Para entrar en la configuración hay que escribir:
sudo make menuconfig

Hay mas modos de edición, pero esta es la más cómoda y la menos problemática desde mi punto de vista, ya que las otras opciones requieren o bien más conocimiento y experiencia o bien dependen  de otros paquetes para mostrar ventanas...
Mencionadas por orden serían estas dos:

sudo make config        >>> Se necesita experiencia ya que nos harán muchas preguntas de hardware.

sudo make xconfig      >>> Se necesitan dependencias por regla general para poder mostrar ventanas.

Con esto ya estamos dentro del configurador, y veremos opciones marcadas así:
 [*]  >>> Opción activada dentro del Kernel
 [M]  >>> Opción disponible mediante Módulo fuera del Kernel
 [ ]  >>> Opción no soportada (Para impedir su uso tanto internamente como usando un módulo)

De esta manera tendremos que ir marcando o desmarcando opciones con la barra espaciadora para poder configurar nuestro Kernel a medida.

Nota: Yo personalmente, desmarco esta opción para eliminar peso del kernel generado:

Kernel hacking  --->
[ ] Compile the kernel with debug info

Una vez terminado de configurar, guardamos los cambios y salimos. (O salimos y nos preguntará si queremos guardar antes de salir, respondemos que sí)


Compilando el nuevo Kernel

Ahora ya estamos listos para compilar nuestro nuevo Kernel.
Antiguamente había que dar unos pocos pasos más para terminar, pero hoy tenemos mas flexibilidad para compilar el Kernel usando la herramienta kernel-package
Para instalarla solo tenemos que teclear:

sudo apt-get install kernel-package

Ahora ya podemos compilar el kernel:
make-kpkg clean
make-kpkg --initrd kernel_image kernel_headers


Nota: si tenemos varios procesadores podemos pasarle el parámetro "-j X" donde la X es el número de procesadores que queremos que use para compilar, acortando así el tiempo de compilado, ejemplo:
make-kpkg -j 4 --initrd kernel_image kernel_headers

Mi micro es un Intel core I3 y este tiene un procesador de doble núcleo que pueden operar como si fuesen otros dos... , así que en teoría tengo 4 procesadores. (de hecho, Linux lo ve así aunque 2 de los procesadores no son reales)

Con eso creamos dos paquetes .deb en el directorio superior, es decir en /usr/src/ que serán para instalar el kernel y sus headers que sirven para compilar otros módulos como los privativos de AMD, madwifin, VMware etc...

Ahora toca esperar.... esperar y esperar a que termine de compilarse el núcleo nuevo.

Una vez haya terminado de compilar, podemos subir al directorio superior y comprobar que paquetes nuevos hay:

cd ..
ls

Con eso vemos la lista de paquetes y podremos ver los nuevos paquetes .deb

Para instalarlos:
sudo dpkg -i archivo1.deb archivo2.deb

En mi caso:
sudo dpkg -i linux-image-3.9.0_3.9.0-10.00.Custom_amd64.deb linux-headers-3.9.0_3.9.0-10.00.Custom_amd64.deb

Aunque los nombres sean largos (cosa que podemos arreglar renombrandolos) no lo serán en la entrada del grub, así que tranquilos.

Listo, ya podemos reiniciar y usar nuestro nuevo kernel, si no funcionase aún podremos usar el antiguo y ver que pasó.

Un saludo.

Este documento se ha confeccionado obteniendo información de diversas fuentes, entre ellas: http://mogaal.com/articulos/kernel-a-la-debian.html 

1 comentario:

Deja aquí tu mensaje...