- Estréllate y Arde - https://www.estrellateyarde.org -
El HOWTO del kernel Linux 2.6
El HOWTO del kernel Linux 2.6:
- Qué es el kernel
- Qué son los módulos
- Compilar el kernel Linux 2.6
- El directorio /proc
El kernel es el encargado de interactuar con el hardware de nuestro equipo. Se encarga de que el hardware se ponga a trabajar: maneja todos los componentes, gestiona el tiempo de CPU para cada programa, administra la memoria, etc. Está en continuo desarrollo y se actualiza con bastante frecuencia. Para saber la versión de nuestro kernel ejecutaremos el comando:
$ uname -r 2.6.8-2-386
Recursos
Desde la versión 2.0 el núcleo consta de dos partes:
El software que controla un dispositivo se denomina controlador, aunque en Windows se le llama driver y en Linux módulo. Para que el kernel pueda manejar un dispositivo debe tener cargado el módulo correspondiente y esto se puede hacer de dos maneras:
# /etc/modules: kernel modules to load at boot time.
ide-cd
ide-disk
psmouse
# modconf
Para ver los módulos cargados ejecutaremos:
$ lsmod Module Size Used by parport 37320 2 lp,parport_pc usbcore 104164 3 uhci_hcd,ohci_hcd,ehci_hcd snd 50660 4 snd_pcm,snd_timer soundcore 9824 1 snd ...
Desde siempre, compilar el kernel es un rito de iniciación para todo linuxero que se precie. Además, un kernel actualizado nos permitirá disponer de nuevos drivers y características y eliminar bugs y agujeros de seguridad.
Debian tiene bien resuelto el tema del kernel: dispone de paquetes .deb que contienen un kernel ya compilado (paquete linux-image...), instalables con APT como un paquete normal, así como herramientas que permiten compilar el kernel "a lo Debian" y construir un paquete .deb para instalarlo posteriormente con APT. A pesar de ello, la mejor manera de actualizar el kernel sigue siendo compilarlo manualmente: es el método más fiable, el más divertido y te permite impresionar a tus amigos. ¡Todo ventajas!
Vamos a compilar un kernel Linux 2.6.20. El proceso tiene cinco etapas:
Para conseguir las fuentes las bajaremos desde el sitio oficial del núcleo kernel.org. Descargaremos el archivo linux-2.6.20.1.tar.bz2 en el directorio /usr/src. Una vez descargado lo desempaquetamos:
# cd /usr/src # tar -xvjf linux-2.6.20.1.tar.bz2
El fichero se desempaquetará en el directorio /usr/src/linux-2.6.20.1, que contiene varios subdirectorios con todo el código necesario, incluyendo abundante información en /usr/scr/linux-2.6.20.1/Documentation.
Si necesitamos un kernel con alguna funcionalidad especial (por ejemplo para activar Xen o LVS), tendremos que parchearlo. Los parches para el kernel deben aplicarse a kernels vanilla, los kernel de kernel.org sin modificar y no a los kernels binarios que proporcionan las distribuciones, que en muchos casos ya incorporan otros parches. Para ello, descargamos de la web del proyecto el parche correspondiente a nuestro kernel (por ejemplo patch-2.6.20.gz) y lo descomprimimos en el directorio de las fuentes del kernel (/usr/src/linux-2.6.20.1):
# cd /usr/src/linux-2.6.20.1 # gunzip patch-2.6.20.gz
Y aplicamos el parche:
# cat patch-2.6.20 | patch -Np1
Con esto ya tenemos las fuentes listas para configurar.
Aquí seleccionaremos las opciones del nuevo núcleo, así como qué se cargará como módulo y qué en la parte monolítica. Podemos plantearlo de dos maneras:
# cd /usr/src/linux-2.6.20.1
y limpiamos las compilaciones anteriores (se borrará .config si existe, veremos las opciones con make --help):
# make clean # make mrproper
# make menuconfig
# cp /boot/config-2.6.8-2-386 .config.old
y lo cargaremos desde la opción Load an Alternate Configuration File.
Sin embargo, esta opción no es recomendable si vamos a cambiar de versión, porque probablemente hayan cambiado las opciones de configuración: es mejor partir de cero.
Debemos tener en cuenta que cada opción que seleccionemos para ser incluida en la parte monolítica hará el núcleo un poco más grande, exigiendo más memoria. Dispondremos de Ayuda en cada opción y recomendaciones del tipo: Si no está seguro, marque Sí.
# rm /usr/src/linux # ln -s /usr/src/linux-2.6.20.1 /usr/src/linux
EXTRAVERSION = .1
por algo similar a:
EXTRAVERSION = .1-r1
De esta manera, la versión del kernel generado será 2.6.20.1-r1, es lo que obtendremos al ejecutar uname -r y también será el directorio usado por make modules_install
# make
Esto generará:
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.20.1-r1
Instalar el nuevo archivo de símbolos System.map (el antiguo es /boot/System.map-2.6.8-2-386):
# cp System.map /boot/System.map-2.6.20.1-r1
Instalar el archivo de configuración del kernel (el antiguo es /boot/config-2.6.8-2-386):
# cp .config /boot/config-2.6.20.1-r1
No eliminaremos los archivos existentes, para poder seguir entrando en el sistema en caso de errores graves.
# make modules_install
No eliminaremos los módulos anteriores.
# mkinitramfs -o /boot/initrd.img-2.6.20.1-r1 /lib/modules/2.6.20.1-r1
# rm /vmlinuz # ln -s /boot/vmlinuz-2.6.20.1-r1 /vmlinuz
# rm /initrd.img # ln -s /boot/initrd.img-2.6.20.1-r1 /initrd.img
# ln -s /boot/System.map-2.6.20.1-r1 /boot/System.map
title Debian GNU/Linux, kernel 2.6.20.1-r1 root (hd0,1) kernel /boot/vmlinuz-2.6.20.1-r1 root=/dev/hda2 ro initrd /boot/initrd.img-2.6.20.1-r1 savedefault boot
No eliminaremos la entrada del kernel antiguo para poder entrar en el sistema en caso de problemas. Una vez comprobemos que el nuevo kernel arranca, lo pondremos el primero de la lista para que sea la opción por defecto.
# uname -r
2.6.20.1-r1
Si el nuevo kernel arranca correctamente, crearemos los archivos de dependencias entre módulos, que se guardan en /lib/modules/2.6.20.1-r1/modules.dep:
# depmod -a
Esto creará varios archivos /lib/modules/2.6.20.1-r1/modules.*
El kernel durante su arranque pone en funcionamiento un pseudo-filesystem llamado /proc, donde vuelca la información que recopila de la máquina, así como muchos de sus datos internos. Está implementado sobre memoria y no se guarda en disco, conteniendo tanto datos estáticos como dinámicos.
El directorio /proc contiene gran cantidad de información de bajo nivel sobre el funcionamiento del sistema y muchos comandos se apoyan en él para sus tareas. Por ejemplo, en /proc podremos encontrar las imágenes de los procesos en ejecución, junto con la información que el kernel maneja acerca de ellos. Cada proceso del sistema se puede encontrar en el directorio /proc/<pid_proceso>, donde hay ficheros que representan su estado. Esta es la información que usan comandos como pstree, ps o top.
El archivo /etc/fstab indica cómo debe montarse el filesystem virtual /proc:
# File_system Mount_point Type Options Dump Pass proc /proc proc defaults 0 0
Otros ficheros de /proc son:
Otros ficheros de /proc | |
Directorio | Descripción |
/proc/bus | Información de los buses PCI y USB. |
/proc/cmdline | Línea de arranque del kernel. |
/proc/cpuinfo | Información de la CPU. |
/proc/devices | Dispositivos del sistema de caracteres o bloques. |
/proc/drive | Información de algunos módulos de hardware. |
/proc/filesystems | Sistemas de ficheros habilitados en el kernel. |
/proc/ide | Información del bus IDE. |
/proc/interrups | Mapa de interrupciones de hardware (IRQ) utilizadas. |
/proc/ioports | Puertos de E/S utilizados. |
/proc/meminfo | Datos del uso de la memoria. |
/proc/modules | Módulos del kernel. |
/proc/net | Información de red. |
/proc/pci | Dispositivos PCI del sistema. |
/proc/scsi | Directorio de dispositivos SCSI, o IDE emulados por SCSI. |
/proc/version | Versión y fecha del kernel. |
Article printed from Estréllate y Arde: https://www.estrellateyarde.org
URL to article: https://www.estrellateyarde.org/so/kernel-linux
Click here to print.
Copyright © 2010 Estrellate y Arde