Kernel Linux



Ya han pasado 20 años desde que este "pequeño" proyecto personal fuera comunicado al mundo un 25 de Agosto de 1991. Tal y como muchos proyectos de Software Libre, todo empezó como una idea personal. Pero acabó siendo quizás el proyecto de mayor relevancia en la historia tanto del Software Libre como de la informática.


El nombre de Linux proviene de su creador Linus Torvalds de Finlandia, que a sus 21 años de edad, quiso realizar un Sistema Operativo similar a Unix. Con la ayuda del código que Tanenbaum desarrolló en Minix, pudo crear una base que ejecutara programas sobre arquitecturas de 80386.

Desde la primera versión 0.01, que inicialmente tuvo como nombre inicial Freax, contaba con 10239 líneas de código, pasando de los 14 millones de líneas de código que tiene actualmente.

Sobre la robustez del código, se han realizado estudio sobre la fiabilidad del código. Coverity, empresa dedicada al testeo de seguridad, realizó un estudio a la versión 2.6 del kernel, como resultado se obtuvo 985 bugs en 5,7 millones de líneas de código. A pesar de la alarmante cifra, si comparamos con cualquier software comercial, la cifra está entre 20 y 30 bugs por cada mil líneas de código, unos 114000 bugs en 5,7 millones de líneas.

A pesar de la gran cantidad de contribuidores, más de un millar de empresas colaboradoras, no quiere decir que no sea un software robusto. Es la experiencia de cada contribuidor, el que hace que el kernel sea tan estable.



La arquitectura es de tipo monolítico, esto hace que la ejecución de todos o su mayoría de servicios del sistema se encuentren en el mismo espacio de direcciones. Es decir, que están dentro del código, esto provoca mejor rendimiento, pero también puede provocar mayor inestabilidad.
Por contrapartida, existen los microkernel, en el que la ejecución de servicios del sistema se hacen en el espacio de usuario como servidores. Es menos complejo, más portable y mantenible. Un ejemplo de microkernel es Minix.

Esta diferencia de arquitectura provocó una gran discusión entre los creadores de ambos sistemas, pues por aquella época, en 1992, Tanenbaum acusaba a Linux de estar obsoleto.

En el kernel de Linux, como en otros Sistemas Operativos existen los módulos, que dan soporte a nuevo hardware, sistema de archivos o incluir nuevas llamadas al sistema. Para trabajar con éstos módulos existen una serie de herramientas llamadas LKM tools que componen las siguientes aplicaciones:


  • lsmod: Listar los módulos cargados.
  • insmod: Cargar un módulo en memoria. Se encuentra en la ruta /lib/modules
  • rmmod: Quitar un módulo de la memoria.
  • modprobe: Usa el fichero de depencias para saber cual hace falta de verdad. Con  modprobe -l podemos sacar una lista de las dependencias.
  • depmod: Crea un fichero de depencias. depmod -a , para regerenar el listado de dependencias. y ser guarda en /lib/modules/$(uname -r)/modules.dep
  • modinfo: Da información detalla sobre un determinado driver. $ modinfo module_name (sacado de lsmod)
Existe también una lista negra de módulos, pues si no queremos cargar cierto módulo por incompatibilidad con el hardware, lo debemos incluir en este directorio: 

/etc/modprobre.d/

o en el siguiente fichero de configuración:

/etc/modprobre.conf

Muy bien, pero... Quiero la última versión del kernel. Existen veces que te compras un ordenador nuevo, y puede que ciertos componentes no funcionen con tu distribución habitual. ¿Cómo solucionar esto? Compilando la última versión del kernel.

Primero necesitamos las herramientas para compilar, para ello debemos descargarnos los siguientes programas:

gcc , binutils, build-essentials, kernel-package, libncurse5-dev

Por ejemplo, desde una distribución basada en Debian sería los siguientes comandos:

sudo apt-get update
sudo apt-get install gcc binutils  build-essential kernel-package  libncurses5-dev 

Una vez que tenemos las herramientas, necesitamos el kernel, nos lo descargamos de la web oficial del kernel, kernel.org

La mejor opción es descargarnos la última versión estable, aunque si queremos lo último siempre podremos utilizar una Release Candidate, marcadas con rc. A la fecha de este post, la última versión es la 3.1.1

Una vez descargado debemos descomprimirlo


sudo tar -xvf linux-3.1.1.tar.bz2 -C /usr/src/


Y ahora vamos donde lo descomprimimos en:


cd /usr/src/linux-3.1.1/

Ahora podemos modificar la configuración del kernel gracias a la herramienta menuconfig

sudo make menuconfig


Esto nos brinda la posibilidad de marcar o desmarcar módulos que nos interesen o que no deseamos que carguen porque sabemos que no lo vamos a necesitar. Puede ser un arma de doble filo, pues si sabemos configurarlo correctamente, tendremos un kernel más ligero y con lo justo para funcionar. Pero si no ponemos todo lo que necesita podremos quedarnos con una distribución que no arranque.

Si no estamos muy seguro de que hacer en este caso, siempre podemos utilizar:

sudo make oldconfig

Con esto creará una configuración como la del kernel que te esta funcionando actualmente, así nos aseguramos de que va funcionar correctamente.

Una vez que guardemos el fichero de configuración, pasamos a compilarlo. Tan sencillo como:

sudo make -j8

Dependiendo de vuestro ordenador tardará mas o menos.



Después de compilar necesitamos instalarlo:

sudo make modules_install install

Esto creará unos ficheros en el directorio /boot/ del tipo:

cd /boot/
ls -la | grep 3.1.1


  • System.map-3.1.1
  • vmlinuz-3.1.1
  • initrd.img-3.1.1
  • config-3.1.1
En caso de no encontrar ningún fichero con un nombre similar a la versión de nuestro kernel, debemos utilizar:

sudo update-initramfs -u -k 3.1.1

Esto pertenece al Initial RAM disk (initrd), son una serie de ficheros usados en el proceso de arranque del kernel. Básicamente montan el sistema de ficheros raíz.
Si el comando anterior no nos ha actualizado o generado un fichero initramfs, debemos crear uno nuevo  con:

sudo update-initramfs -c -k 3.1.1

Por último, este comando nos ha generado una nueva configuración del sistema de arranque grub, si  lo deseamos modificar, podemos hacerlo directamente desde:

sudo vim /boot/grub/grub.cfg

Pero si finalmente queremos aplicar la configuración debemos utilizar:

sudo update-grub

Ya solamente queda reiniciar y a disfrutar!




0 comentarios:

Publicar un comentario