FAQ sobre Linux para principiantes - es.comp.os.linux: Kernel / Nucleo

Next Previous Contents

## 5. Kernel / Nucleo

## 5.1 ¿Qué 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 nucleo experimental, decide que ha conseguido un nucleo 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 nucleo se numeran con 3 numeros, de la siguiente forma: `XX.YY.ZZ`

- `XX`: Indica la serie principal del nucleo. Hasta el momento solo existen la 1 y 2. Este numero cambia cuando la manera de funcionamiento del nucleo 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 versiones 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 nucleo 2.0.0: Nucleo de la serie 2 (XX=2), version de produccion 0 (YY=0 par), primera version de 2.0 (ZZ=0)
- `ej2`: version del nucleo 2.0.1: Nucleo de la serie 2, version 0, en el que se han corregido errores de programacion presentes en la version 2.0.0 (ZZ=1)
- `ej3`: version del nucleo 2.1.100: version 100 del nucleo de desarrollo 2.1.

## 5.2 ¿Dónde consigo el kernel?

El nucleo se puede bajar de un gran numero de servidores en internet. El servidor principal es http://www.kernel.org/ y la pagina de servidores espejos es http://www.kernel.org/mirrors/.

Si tienes problemas accediendo a estas paginas, aqui tienes una copia en otro servidor http://linux-es.uio.no/lista_kernel.html

## 5.3 ¿Cómo se configura e instala el 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 nucleo 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 nucleo en tu sistema.

Has decidido instalar un nuevo nucleo 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 nucleo de la serie 2.2.x, teneis que tener en cuenta que algunas distribuciones no estan/estaban preparadas para hacer uso de esta serie. Si vuestra distribucion no es de las que vienen preparadas, teneis que actualizar una serie de paquetes/programas antes de instalar el nuevo nucleo (mas informacion en la documentacion que acompaña al nucleo).

2. Tener claro lo que vamos a hacer, leete el documento HOWTO sobre el nucleo ( 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 nucleo. 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.yy.zz.tar.gz /usr/src/`

6. Descomprimirlo y desempaquetar: `tar -xvzpf linux-xx.yy.zz.tar.gz`

   NOTA: El archivo `linux-xx.yy.zz.tar.gz` 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-x.y.z`, borra este enlace simbolico. Es importante que no exista ningun directorio/enlace simbolico llamado linux, antes de desempaquetar la nueva version. Si te has bajado el kernel comprimido con bzip2, tendras que descomprimirlo con `bunzip2 linux-xx.yy.zz.tar.bz2`

7. Entrar en /usr/src/linux: `cd /usr/src/linux`

8. Configurar el nucleo, esto se puede hacer de tres maneras diferentes:
   - `make config` (modo texto)
   - `make menuconfig` (modo texto con menus)
   - `make xconfig` (X-windows version)

9. Si teneis X-windows instalado, os recomiendo el ultimo comando, si no el segundo.

10. Os recomiendo que las opciones que vienen por defecto no las toqueis, si no sabeis lo que haceis, podeis pulsar `Help` en cada opcion para obtener una descripcion de la misma. Configurar las opciones que quereis tener en vuestro nuevo nucleo. 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 nucleo, para computar las dependencias entre modulos.

13. Ya tenemos el nucleo 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 nucleo 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 nucleo. 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 nucleo 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 nucleo, siempre podriamos arrancar con el antiguo escribiendo `linux` y pulsando `ENTER` 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 nucleo 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.

## 5.4 ¿Qué son los parches (patchs)? ¿Cómo se instalan?

Seguramente habreis oido hablar de los parches para el nucleo, si no, aqui teneis informacion sobre los mismos.

Que son los parches y para que sirven?:

Un parche para el nucleo 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 buena 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.10), 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 nucleo, 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:

- Copia el fichero patch-XX.YY.ZZ.gz al directorio /usr/src : `cp patch-XX.YY.ZZ.gz /usr/src/`
- Cambia a este subdirectorio y descomprime el fichero: `cd /usr/src/; gunzip patch-XX.YY.ZZ.gz`
- Aplica el parche: `patch -s -p0 < patch-XX.YY.ZZ`
- 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`
- Y ejecutar `make clean, make xconfig, make dep, make bzImage`, el resto es igual que en la seccion anterior a partir del punto 12)

Esto es todo lo que se me ocurre sobre los parches del nucleo.

## 5.5 ¿Algun consejo sobre el kernel?

Pregunta: Necesito actualizar el nucleo que utilizo, cada vez que una nueva version aparece? Respuesta: NO. Porque? La explicacion es la siguiente:

Cuando un nuevo nucleo aparece, puede ser por las siguientes causas:

- Nuevas caracteristicas se han anadido.
- Fallos de programacion se han corregido
- Fallos de seguridad se han corregido.
- 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 nucleo 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 nucleo? Respuesta: Te aconsejo que esperes un poquito. La distribucion que acabas de instalar (si es de las ultimas) viene con un nucleo 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 nucleo. Un buen punto de partida para encontrar informacion sobre el nucleo, lo tienes en estas paginas.

## 5.6 Enlaces sobre el kernel

- The LinuxKernel Archives: Pagina principal/oficial sobre el nucleo.
- Kernel Traffic: Informacion sobre la lista de correo sobre el nucleo.
- KernelNotes: Mucha informacion sobre nucleo.
- LinuxMama: Actualizaciones no oficiales.
- Kernel Howto (Ingles)
- Kernel Howto (Castellano)
- LILO MiniHowto (Ingles)
- Guia de programacion: de modulos para el nucleo (ingles)
- The Linux Kernel: Libro (ingles)

Next Previous Contents