Que es el kernel?

* Qué es el Kernel?
* Dónde conseguir el kernel
* Configuración e instalación del kernel
* Parches(patches) para el kernel
* Consejos sobre el kernel
* Enlaces sobre el kernel
* Directorio del kernel


Que es el kernel?

El kernel o nucleo de linux se podria definir como el corazon de este sistema operativo. Es el encargado de que el software y el hardware de tu ordenador puedan trabajar juntos.

Las funciones mas importantes del mismo, aunque no las unicas, son:

* Administracion de la memoria, para todos los programas en ejecucion.
* Administracion del tiempo de procesador, que estos programas en ejecucion utilizan.
* Es el encargado de que podamos acceder a los perifericos/elementos de nuestro ordenador de una manera comoda.

Existen dos versiones del Linux kernel:

* Version de produccion: La version de produccion, es la version estable hasta el momento. Esta version es el resultado final de las versiones de desarrollo o experimentales.

Cuando el equipo de desarrollo del kernel experimental, decide que ha conseguido un kernel estable y con la suficiente calidad, se lanza una nueva version de producion o estable. Esta version es la que se deberia utilizar para un uso normal del sistema, ya que son las versiones consideradas mas estables y libres de fallos en el momento de su lanzamiento.

* Version de desarrollo: Esta version es experimental y es la que utilizan los desarrolladores para programar, comprobar y verificar nuevas caracteristicas, correcciones, etc. Estos nucleos suelen ser inestables y no se deberian usar, a no ser que sepas lo que haces.

Como interpretar los numeros de las versiones:

* Las versiones del kernel se numeran con 3 numeros, de la siguiente forma: XX.YY.ZZ

XX: Indica la serie principal del kernel. Hasta el momento solo existen la 1 y 2. Este numero cambia cuando la manera de funcionamiento del kernel ha sufrido un cambio muy importante.
YY: Indica si la version es de desarrollo o de produccion. Un numero impar, significa que es de desarrollo, uno par, que es de produccion.
ZZ: Indica nuevas revisiones dentro de una version, en las que lo unico que se ha modificado, son fallos de programacion/bugs.

* Unos ejemplos nos ayudaran a entenderlo mejor:

ej1: version del kernel 2.4.0: Kernel de la serie 2 (XX=2), version de produccion 4 (YY=4 par), primera version de 2.4 (ZZ=0)
ej2: version del kernel 2.4.1: Kernel de la serie 2, version 4, en el que se han corregido errores de programacion presentes en la version 2.4.0 (ZZ=1)
ej3: version del kernel 2.5.0: version 0 del kernel de desarrollo 2.5.

Donde conseguir el kernel

El kernel se puede bajar de un gran numero de servidores en internet. En el directorio del kernel en este servidor, podras bajar las ultimas versiones del Kernel, bajadas directamente de http://www.kernel.org/.

En este enlace tienes la lista internacional oficial de servidores espejos, de donde es posible bajarse cualquier version del kernel (ultima y antiguas).

Configuracion e instalacion de un nuevo kernel

Este es uno de los temas que asustan a los nuevos usuarios de Linux. Lo primero deciros que no hay razon para asustarse, la configuracion e instalacion de un nuevo kernel en nuestro sistema es mas facil de lo suena.

Lo que si hay que hacer es tener claro una serie de cosas antes de ponernos a trabajar, para asi evitar problemas. A continuacion tienes una pequena guia sobre como configurar e instalar un nuevo kernel en tu sistema.

Has decidido instalar un nuevo kernel en tu sistema, que es lo que tenemos que hacer?

1. Bajarte la ultima version. De donde? Leete la seccion anterior.

NOTA: Si vais a instalar un kernel de las ultimas series de produccion, teneis que tener en cuenta que algunas distribuciones (si son antiguas) pueden no estar preparadas para hacer uso de estas series. Si vuestra distribucion no viene preparada para soportar los ultimos kernels, teneis que actualizar una serie de paquetes/programas antes de instalar el nuevo kernel (mas informacion en la documentacion que acompaña al kernel). o actualizar a una distribucion o version de vuestra distribucion que los soporte.

2. Tener claro lo que vamos a hacer, leete el documento HOWTO sobre el kernel (Ingles / Castellano)
3. Tener claro las opciones que tenemos que configurar, para poder utilizar el hardware de nuestro sistema, asi como las caracteristicas que queremos utilizar. Por ejemplo, si no utilizamos un dispositivo SCSI, no tenemos que configurar nada en el apartado SCSI de nuestro kernel. Asi nos ahorramos espacio y tiempo.

4. Entrar como root: su root
5. Copiar el archivo que te has bajado al directorio /usr/src/ cp linux-xx.xx.xx.tar.bz2 /usr/src/
6. Descomprimirlo y desempaquetarlo: tar -xvzpf linux-xx.yy.zz.tar.gz

NOTA IMPORTANTE: El archivo linux-xx.yy.zz.tar se desempaquetara en el directorio /usr/src/linux
Si ya existe un directorio llamado linux en tu sistema, renombralo, p.ej: mv linux linux-old . En algunas distribuciones, linux es un enlace simbolico a linux-xx.yy.zz, borra este enlace simbolico. Es importante que no exista ningun directorio/enlace simbolico llamado linux, antes de desempaquetar la nueva version.

7. Entrar en /usr/src/linux: cd /usr/src/linux
8. Configurar el kernel, esto se puede hacer de tres maneras diferentes:

make config (modo texto)

make menuconfig (modo texto con menus)

make xconfig (X-windows version)

9. Os recomiendo el ultimo comando o el segundo, totalmente desaconsejado usar el primero.

10. Os recomiendo que las opciones que vienen por defecto no las toqueis, si no sabeis lo que haceis. Configurar las opciones que quereis tener en vuestro nuevo kernel. Una vez terminada la configuracion, grabar los cambios y salir del programa de configuracion.

11. Una vez terminado el proceso de configuracion, tenemos que compilar nuestro nuevo nucleo. Para ello hay que hacer lo siguiente:

make dep
make clean
make bzImage

12. Si en el proceso de configuracion, elegimos alguna opcion como modulo, tendremos que compilar/instalar dichos modulos:

make modules
make modules_install

NOTA: No olvidar ejecutar como root el comando depmod -a la primera vez que arranqueis con vuestro nuevo kernel, para computar las dependencias entre modulos.

13. Ya tenemos el kernel y los modulos compilados, ahora tenemos que instalarlo. Casi todo el mundo utiliza LILO para arrancar el sistema, por ello explicare como instalarlo utilizando LILO.

Todavia estamos en /usr/src/linux ejecutar el comando make install , esto copiara el kernel que acabamos de crear, a el directorio /boot de nuestro sistema, con el nombre vmlinuz., o como un enlace simbolico vmlinuz -> vmlinuz-xx.yy.zz

14. Ahora tenemos que configurar LILO para que reconozca el nuevo kernel. Tendremos que modificar el fichero /etc/lilo.conf

Aqui teneis un ejemplo, del fichero /etc/lilo.conf antes de modificarlo:

boot=/dev/hda
prompt
timeout=50
image=/boot/vmlinuz-2.0.34
label=linux
root=/dev/hda1
read-only

Y aqui como quedaria despues de la modificacion para que reconozca nuestro nuevo kernel al arrancar:

boot=/dev/hda
prompt
timeout=50
image=/boot/vmlinuz
label=nuevokernel
root=/dev/hda1
read-only
image=/boot/vmlinuz-2.0.34
label=linux
root=/dev/hda1
read-only

15. Ahora solo tenemos que ejecutar el comando /sbin/lilo y arrancar el sistema de nuevo. Si tuviesemos algun problema con el nuevo kernel, siempre podriamos arrancar con el antiguo escribiendo linux cuando arrancamos y nos sale en pantalla lilo: De esta manera podemos entrar y ver que es lo que ha fallado.

NOTA: Recordar que existen multitud de opciones para configurar LILO, y que los ejemplos anteriores, son ejemplos. Puede que vuestro sistema necesite diferentes parametros y opciones. Leeros los documentos HOWTOS sobre el kernel y LILO antes de cambiar nada en vuestro sistema. Al final de esta pagina teneis enlaces a los mismos. Suerte y espero que tengais las cosas un poco mas claras.


Parches (patches) para el Kernel

* Que son los parches y para que sirven:

Un parche para el kernel no es mas que un fichero, que solamente contiene informacion sobre las lineas de codigo que han cambiado desde la version precedente del nucleo. De esta manera, solamente te tienes que bajar un fichero con los cambios, en vez del nucleo al completo. El ahorro en cantidad de Mb bajados es bastante considerable, sobre todo para aquellos que dependen del modem y no tiene una conexion rapida a internet.

Algo a tener muy en cuenta si vais a actualizar el nucleo por medio de parches en vez de bajaros el nucleo al completo, es que teneis que ir actualizando de version a version. Para que se entienda un poco mejor, aqui teneis un ejemplo:

Si teneis el nucleo 2.2.0 y vais a actualizarlo al 2.2.1, os podeis bajar el fichero patch-2.2.1.gz [70Kb] en vez, del nucleo 2.2.1 al completo [12.5Mb]. Pero si teneis el nucleo 2.2.0 y vais a actualizar al 2.2.4, NO os vale bajaros el fichero patch-2.2.4.gz nada mas, tendriais que bajaros el 2.2.1, 2.2.2, 2.2.3 y 2.2.4. Esto es porque los ficheros patch solamente contienen los cambios de version a version.

Si la diferencia entre la version que teneis y la que quereis instalar, es muy grande (p.ej: del 2.2.0 al 2.2.35), no os merece la pena actualizar por medio de parches, en este caso bajaros la version completa.

* Que hacer con un fichero patch-XX.YY.ZZ.gz?:

Ya te has bajado el fichero patch (se pueden bajar del mismo subdirectorio donde esta la version completa), que necesitas para actualizar el kernel, y ahora que haces?. Ahora, hay que aplicarlo al nucleo que tienes y compilar de nuevo. El procedimiento para actualizar el nucleo por medio de ficheros patch es el siguiente:
1. Copia el fichero patch-XX.YY.ZZ.gz al directorio /usr/src : cp patch-XX.YY.ZZ.gz /usr/src/
2. Cambia a este subdirectorio y descomprime el fichero: gunzip patch-XX.YY.ZZ.gz
3. Aplica el parche: patch -s -p0 < patch-XX.YY.ZZ
4. La opcion -s hara que solo se impriman mensajes de error. Si no recibes ningun mensaje de error (como deberia de ser ;-)) solamente te queda entrar en /usr/src/linux: cd /usr/src/linux
5. Y ejecutar make clean, make xconfig, make dep, make bzImage, el resto es igual que en la seccion anterior a partir del punto 12)


Consejos

* Pregunta: Necesito actualizar el kernel que utilizo, cada vez que una nueva version aparece?

Respuesta: NO. Porque? La explicacion es la siguiente:

Cuando un nuevo kernel aparece, puede ser por las siguientes causas:
o Nuevas caracteristicas se han anadido.
o Fallos de programacion se han corregido
o Fallos de seguridad se han corregido.
o Nuevo hardware es soportado.

Si las caracteristicas que se han anadido, no las vamos a utilizar, es evidente que no necesitamos actualizar.
Si los fallos de programacion que se han corregido, afectan a caracteristicas/drivers que no utilizamos, no necesitamos actualizar.
Si no utilizamos el nuevo hardware soportado, tampoco necesitamos actualizar.

De todas maneras es recomendable, actualizar de vez en cuando, sobre todo cuando se corrigen fallos de seguridad o cuando los cambios en el nuevo kernel afectan a caracteristicas/funciones/hardware que utilicemos.

El codigo esta ahi, libre y esperando a ser compilado en un nuevo ordenador, cada usuario debe de decidir cuando es hora de una actualizacion.

* Pregunta: Soy nuevo en Linux y acabo de instalar una distribucion, como actualizo el kernel?

Respuesta: Te aconsejo que esperes un poquito. La distribucion que acabas de instalar (si es de las ultimas) viene con un kernel de los "ultimos", totalmente funcional y que te sirve sin problemas.

Utiliza el sistema un tiempo, familiarizate con el nuevo sistema que acabas de instalar, y cuando comprendas un poco mas como funcionan las cosas, actualiza el kernel. Un buen punto de partida para encontrar informacion sobre el kernel, lo tienes en estas paginas.

Enlaces sobre el kernel

* The Linux Kernel Archives Pagina principal/oficial sobre el kernel
* KernelNotes Mucha informacion sobre kernel
* Linux Mama Actualizaciones no oficiales
* Kernel Howto (Ingles)
* Kernel Como (castellano)
* LILO MiniHowto (Ingles)
* Guia de programacion de modulos para el kernel (ingles)
* The Linux Kernel Libro (ingles)