Compilar e instalar un nuevo kernel

De MEPIS Documentation Wiki


Aviso: Hay también un escrito informativo sobre este tema basado en Debian disponible en: "Como-compilar-el-kernel-de-Debian (en)"


Tabla de contenidos

Programas necesarios

kernel-package - este programa se necesita para crear los paquete deb del kernel.
build-essential - este programa se necesita para crear paquetes Debian.
libncurses5-dev - este programa se necesita para usar make menuconfig o make xconfig.
libqt3-mt-dev libqt3-headers - estos programas se necesitan para ejecutar make xconfig.
linux-source-? - este es el paquete del código fuente del kernel que se necesita descargar para compilarlo.
module-assistant - este es el programa necesario para construir los módulos que faltan tras compilar el kernel

Instalar los programas requeridos

  1. Se puede usar apt-get install con los nombres anteriormente enumerados tal y como están escritos o mediante kpackage. Si se está usando una consola de comandos se tiene que usar apt-get update antes y depués apt-get install nombredelprograma
apt-get update
apt-get install build-essential kernel-package libncurses5-dev libqt3-mt-dev module-assistant
  1. El paquete linux-source se puede descargar con apt-get o kpackage. Se tiene que sustituir la ? por el número de versión apropiado en linux-source-?. Por ejemplo, si se quiere el kernel 2.6.15 se tendría que escribir "linux-source-2.6.15" sin las comillas.
  2. Si se quiere una versión de un kernel que no está en los repositorios de debian se puede descargar de aquí: ftp://ftp.kernel.org/pub/linux/kernel/ y hacer click en una de las carpetas cuyo nombre empieza con "v". Hay que tener presente que los nombres de la lista de directorios están ordenados de acuerdo a la secuencia de ordenación ASCII; 2.6.10 viene entre 2.6.1 y 2.6.2, no depués de 2.6.9.

Extraer el archivo del Kernel

  • Si se descarga e instala el paquete linux-source-? con synaptic, kpackage o apt-get, el fichero linux-source-?.tar.gz o tar.bz2 se colocará en el directorio /usr/src folder y se tendrá que descomprimir el fichero haciendo click con el botón derecho y seleccionando "extraer aquí". Para hacer esto se tiene que usar el Gestor de ficheros en modo superusuario que se encuentra en el menú Kmenu > Sistema > Sistema de ficheros. O se puede hacer de forma manual en una línea de comandos como superusuario usando tar.

¡Hay que asegurarse de que el nombre del archivo que se escribe concueda con el nombre real!

  • Si se descarga el kerndel del ftp de kernel.org ftp se tendrá que mover de forma manual el archivo a la carpeta /usr/src tras la descarga. Se puede hacer esto se usando el Gestor de ficheros en modo superusuario o en una línea de comandos escibiendo su para cambiar a superusuario y escribiendo depués
mv /ruta/al/archivo/linux-?.tar.? /usr/src/ 

(donde /ruta/al/archivo es la ruta real al archivo del kernel). Una vez hecho esto se puede descomprimir usando alguno de los métodos descritos anteriormente. Los signos ? tienen qu ser sustituidos por los números de versión y extensiones de fichero.

Crear un directorio de compilación - Con un enlace simbólico

Una vez descargado y descomprimido el código fuente del kernel en el directorio /usr/src directory escribir en un teminal su para cambiar a superusuario. Escribir:

cd /usr/src 

y luego:

ln -s linux-source-? linux 

Sustituir "?" con la versión del kernel que se descargó ( l en ln es öa letra l y significa enlace y -s significa simbólico. La palabra linux al final es el nombre del nuevo enlace).

Aplicar parches al kernel

Si se quiere aplicar parches al kernl segui estas instrucciones.

Configurar el Kernel

  1. Escribir cd linux en el terminal y escribir después make oldconfig. Llegados a este punto puede que se nos hagan preguntas a las que basta con responder pulsando "enter" despés de cada una de ellas para elegir la respuesta por defecto. No hace falta escribir una respuesta. Si se introduce una respuesta incorrecta puede que el kernel resultante sea inutilizable.
  2. Tras la finialización de make oldconfig se vuelve a la línea de comandos dónde se pueden cambiar algunos de los parámetros de configuración del kernel para eliminar opciones innecesarias o para añadir algunas que se quiera. Si se está actualizando el kernel, hay que tener presente que la estructura de las opciones del kernel puede haber cambiado y puede ser necesario volver a seleccionar una opción previamente seleccionada en un menú diferente.
  3. Si se quiere hacer cambios adicionales en la configuración del kernel, se puede escribir make menuconfig y revisar todas las opciones de configuración del kernel para añadir o eliminar cosas.
  4. Se puede usar make xconfig en vez de make menuconfig. xconfig es una herramienta más sencilla y con mejor apariencia para configurar el kernel. Si se producen errores xhost cuando se intenta ejecutar el comando se tiene que escribir exit en la línea de comandos para volver a la cuenta de usuario, para luego escribir xhost +local:0 (es un cero lo que va al final) y pulsar enter. Escribir su para cambiar a superusuario de nuevo. Ahora se puede escribir make xconfig y ver el menú.
  5. Configurar el kernel como se quiera pero asegurarse de no eliminar nada que se vaya a necesitar. Cambiar el procesador al modelo específico del que se disponga. Se pueden encontrar otras recomendaciones sobre el rendimiento aquí (en). Cuantos más elementos innecesarios se eliminen más rápido será el kernel. Si se sabe que se tiene un hardware específico, compilarlo en el kernel en lugar de usar un módulo. En caso de duda dejarlo como un módulo. Los módulos se cargan bajo demanda. Para obtener información sobre de qué hardware se dispone, la salida de lspci es útil así como instalar y ejecutar como superusuario la aplicación lshw. La práctica hace la perfección y todo el proceso llevará mucho menos tiempo si se dispone de experiencia.
  6. Sonido: El kernel de SimplyMepis (en la versión 6.5) incluye los módulos de sonido ALSA de forma independiente y el código fuente para los mismos no se encuentra en los repositorios estándar. En la sección de configuración del kernel se tendrá que habilitar los controladores de sonido ALSA en Device Drivers->Sound->Advanced Linux Sound Architecture. Se puede seleccionar el controlador para la tarjeta de sonido de que se disponga o en caso de duda seleccionarlos todos.

Compilar el Kernel

Compilar el kernel escribiendo:

make-kpkg buildpackage imagen_del_kernel

O, en caso de necesitar initrd (puede que se necesite initrd en caso de querer arrancar el kernel desde otros dispositivos que no sean el disco duro, por ejemplo desde una unidad USB o un CD):

make-kpkg buildpackage imagen_del_kernel --initrd

Sin embargo, si se recompila la misma versión del kernel usar los siguientes comandos:

make-kpkg clean
make-kpkg buildpackage -append_to_version -personalizado imagen_del_kernel  

"-personalizado" puede ser cualquier cosa, pero tiene que comenzar con un - (símbolo de resta). Puede que se tenga que ejecutar el comando anterior dos veces.

La compilación del kernel llevará un rato por lo que podemos tomar un descanso mientras acaba. Puede llevar una hora, más o menos, dependiendo del tamaño del kernel y de la velocidad del ordenador.

Instalar el Kernel y los archivos Deb adicionales del Kernel

Cuando se vuelva al prompt se puede usar el gestor de archivos para mirar en el directorio /usr/src y ver si se tienen cuatro paquetes con la extensión .deb. Se deberían de instalar todos los debs: kernel-image, linux-source, kernel-headers y kernel-doc. Realmente sólo se necesita kernel-image para instalar el nuevo kernel en el sistema pero puede que se necesite el código fuente y las cabeceras para compilar otras cosas posteriormente. Por lo que se deberían de instalar todos los paquetes deb. La forma más sencilla para instalarlos es ejecutar en una línea de comandos:

cd /usr/src 
dpkg -i *.deb 

Esto instalará todos los paquetes de una vez.


Editar el menú de arranque de Grub

Una vez instalado el paquete del kernel la entrada se debería crear de forma automática en GRUB, si por algún motivo no está allí se puede añadir siguiendo estos pasos:

  1. Cuando se vuelva al prompt se habrá acabado la compilación e instalación del nuevo kernel. Ahora se tiene que editar el archivo /boot/grub/menu.lst para añadir el nuevo kernel como opción de arranque en el menú de arranque. Se puede hacer esto dejando abierta la ventana del termina y todavía conectado como superusuario escribir kwrite /boot/grub/menu.lst y abrirá el editor de texto kwrite con dicho fichero en él (se se muestra un error xhost, basta con escribir exit cambiar a modo usuario y escribir xhost +local:0 para a continuación escribir su para pasar a modo superusuario. Esto permitirá usar como superusuario). También se puede editar en el terminal usando el comando: nano -w /boot/grub/menu.lst
  2. Una vez abierto el fichero se tienen que copiar todas las líneas del kernel anterior y usarlas para el nuevo kernel también. No se recomienda borrar las entradas de los otros kernels (se puede hacer posteriormente si se decide que el nuevo funciona genial y que sólo se quiere ese). Tras copiar y pegar las líneas de arranque del kernel hay que cambiar la versión del jernel in la línea que pone vmlinuz.

Archivo de ejemplo del menú de Grub (/boot/grub/menu.lst):

title MEPIS at sdb1, kernel 2.6.nuevaversion
root (hd0,1)
kernel /boot/vmlinuz-2.6.nuevaversion root=/dev/sda2 nomce quiet vga=791
boot

title MEPIS at sdb1, kernel 2.6.15-27-368
root (hd0,1)
kernel /boot/vmlinuz-2.6.15-27-368 root=/dev/sda2 nomce quiet vga=791
boot

Como se puede ver arriba, la entrada del nuevo kernel es exactamente igual a la antigua (2.6.15-27-386) excepto por la línea del título y la línea del kernel dónde tiene "vmlinux-", la nuevaversion debería de ser la versión del kernel recien compilado.

Guardar el archivo y cerrar el editor de texto. Reiniciar el equipo y seleccionar el nuevo kernel en el menú de arranque de grub.

Pulsar F2 para to ocultar la pantalla de splash y ver los posibles errores. Comprobar también posibles errores en /var/log/messages.

Instalar módulos que falten

Frecuentemente tras compilar el kernel habrá algunos módulos que falten. Tras reinicar usando el nuevo kernel hay que iniciar module-assistant usando

m-a update

ntfs-3g

Para poder leer y escribir el unidades formateadas con ntfs se necesita tener los módulos fuse instalados. Para instalr los módulos necesarios a partir del código fuente, ejecutar

m-a a-i fuse-source 

Tarjetas inalámbricas

Para poder usar los controladores de tarjetas inalámbricas en Linux se necesita tener el módulo ndiswrapper instalado. Basta con ejecutar

m-a a-i ndiswrapper-source

Recompilando un Kernel

En realidad es el mismo proceso que se acaba de describir. Todo lo que se necesita si se quiere volver a compilar el mismo kernel otra vez es desinstalar el kernel usando kpackage.

Abrir kpackage, hacer click en la pestaña Instalados y depués en el icono Buscar en el extremo izquierdo del menú lateral. Buscar en los kernels instalados y hacer click en el circulo en la parte derecha del kernel que se quiere desinstalar. Luego hacer click en el botón instalar en la parte inferior de la pantalla.

Asegurarse de que marca la casilla de purgar los ficheros antes de hacer click en el botón final de desintalación que aparezca. A continuación se puede seguir los pasos de la guía anterior para compilar un nuevo kernel.

Se desinstala el kernel antes de compilar, generar e instalar de nuevo porque se quiere evitar problemas debidos a que el kenel anterior y el nuevo tengan el mismo nombre. La desinstalación soluciona eso.

Explicación de comandos

cd = cambiar de directorio
mv = mover
ln -s = crear un enlace simbólico
su = cambiar a modo superusuario (se solicita la contraseña de superusuario)
tar xvzf = comando usado para descomprimir archivos tar.gz
tar xvjf = comando usado para descomprimir archivos tar.bz2
/path/a = escribir la ruta completa al archivo incluyendo el nombre del fichero
dpkg -i = comando usado para instalar un paquete deb
terminal = programa Konsole o Terminal que se puede encontrar en KMenu > menú de Sistema
KMenu = El icono del escritorio que se parece a una gran K
make kpkg = comando para empaquetar el kernel en un archivo deb
make oldconfig = comando para configurar que el kernel utilice las opciones del kernel con el que se ha arrancado.
make menuconfig = comando para abrir un menú de configuración del kernel para poder cambiar las opciones del mismo.
make xconfig = lo mismo que el comando menuconfig pero con un menú con mejor apariencia y más sencillo de leer.
Kpackage = Gestor de paquetes que se encuentra en Kmenu > menú de Sistema.
apt-get update = comando usado para actualizar la lista de fuentes de apt para ser poder usar el comando apt-get install o el comando apt-get upgrade.
apt-get install = comando usado para instalar un paquete desde el terminal. A continuación del comando se tiene que especificar el nombre del paquete. Ejemplo apt-get install paquete-del-kernel
xhost +local:0 = comando que se necesita ejecutar como usuario en un terminal para dar permisos de superusuario al menú de configuración del kernel xconfig si se está usando la versión de KDE 3.3.0, 3.3.1 o 3.3.2. No es necesario si se está usando la versión 3.2 de KDE. Se puede ver la versión de kde de la que se dispone haciendo click en Kmenu > Sistema > Configuración > Centro de Control

Comandos opcionales - En caso de ser necesarios

rm = comando para eliminar un archivo o un enlace simbólico
rmdir = comando para eliminar un directorio o carpeta
cp = comando usado para copiar un archivo o una carpeta de un lugar a otro
gzip -d = comando para descomprimir un archivo con la extensión gz
bz2 -d = comando para descomprimir un archivo con la extensión bz2
tar xvf = comando para descomprimir un archivo con la extensión gz tar, usado después de un comando gzip -d o bz2 -d. Hay que tener en cuenta que tar no permite que otra cosa que no se el nombre del archivo vaya después del parámetro f; otros parametros deben ir antes de f.

Más información

Siempre se pueden consular las observaciones más recientes sobre la compilación del kernel usando las herramientas de debian en /usr/share/doc/linux-source-2.6.15/debian.README.gz

Herramientas personales
Otros idiomas