GNU/Linux – Compilación del KERNEL

Anuncio
GNU/Linux – Compilación del KERNEL
COMPILACIÓN DEL KERNEL El kernel o núcleo es el corazón del sistema operativo.
Es el sistema operativo en sí mismo. Todo lo que no sea el kernel se denomina
aplicación, en el caso de Linux, el 95% de las aplicaciones son GNU. El núcleo se
encarga de manejar una infinidad de cosas, entre ellas están: manejo de memoria,
periféricos, procesos, paquetes de red, todo el hardware en general, etc.
Generalmente, los núcleos que vienen pre-compilados en las distribuciones más
grandes, se adaptan a la mayoría de las instalaciones, pero existen casos en los cuales
se hace necesario compilar e instalar un núcleo nuevo. Las razones pueden ser
variadas, pero la mayoría de las veces es porque se necesita una versión más
moderna del núcleo (con problemas solucionados) o se instala un nuevo hardware que
no está contemplado en el núcleo de la distribución que estamos utilizando en este
momento.
¿De dónde podemos bajar el núcleo de GNU/Linux? Ud. podrá obtener el kernel
de Linux ingresando a www.kernel.org. Una vez que ingrese al sitio Ud. verá una
gran variedad de versiones para descargar. La que le recomendamos que baje es
"The latest stable versión of the Linux kernel is: (versión) (fecha) F V VI
Changelog"
Si desea descargar la versión completa debe clickear en "F" (full) Los otros son
parches, que sirven para aplicar las últimas modificaciones sobre la versión anterior de
las fuentes si ya las habías descargado.
Para descargar el código fuente también podría usar el siguiente comando:
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux- 2.4.20.tar.gz
La última versión (a la fecha, nov/2003) de Kernel es 2.4.21, veamos que significa
cada número:

El primer número de los que van separados por puntos corresponde a la versión
del kernel, actualmente es la 2 y varía con muy poca frecuencia (la primera fue la
0 en 1991).

La segunda cifra corresponde al patchlevel, actualmente es la 4 y varía cada dos
o tres años aproximadamente en las cifras pares: un "patchlevel" impar indica una
versión del kernel "beta" o en pruebas, que hace de paso intermedio para que los
desarrolladores puedan probar nuevos componentes para la siguiente versión par.
Las versiones impares normalmente no están pensadas para usuarios normales, y
solo deberían usarse si la versión estable actual no contiene controlador
(controlador (driver) para un dispositivo específico y no ha encontrado ningún
controlador (driver) por separado salvo en el kernel "beta".

Por último la tercera cifra, indica el subnivel (sublevel), que actualmente es el 21,
varía cada pocos meses y normalmente consiste en pequeñas correcciones de
fallos que tenga la versión inicial del "patchlevel" correspondiente.
En las versiones estables los cambios son más lentos porque sólo se corrigen
pequeños fallos y crecen en proporción logarítmica. Recién liberada una versión
estable hay más fallos que encontrar. En las versiones beta este número varía
rápidamente, porque normalmente se van añadiendo nuevos controladores (drivers)
además de ir corrigiendo fallos. Por ejemplo actualmente el kernel estable va por el 21
(2.4.21) mientras que el beta, que se creó más tarde, ya va por la 2.6.0- test1.
Marco Antonio de Hoyos
Pág 1
http://tecnicoslinux.com.ar
GNU/Linux – Compilación del KERNEL
¿Qué es la compilación?
La compilación es el proceso que se le aplica a los archivos de texto que escribió un
programador (con una sintáxis específica llamada "lenguaje de programación") para
que los mismos se conviertan en archivos "binarios" (formato que entiende la
computadora).
Los comandos que se usan durante la compilación son los siguientes:
COMANDO make Sintáxis: make [opciones] [seccion-Makefile]
Este comando se utiliza para compilar, linkeditar e instalar un programa que requiera
de la compilación de varios fuentes (archivos .c). Generalmente, un programa
medianamente grande, se integra de una biblioteca de funciones propias y varios
fuentes. El make conoce en qué orden de secuencia debe compilar todos estos fuentes
y dónde debe instalarlos para que el usuario utilice el programa recién compilado y
cómo debe relacionarlos entre sí para que puedan ejecutarse en el orden especificado.
COMANDO Sintáxis: gcc [opciones] <archivo.c>
Este comando compila y linkedita los programas. Opciones:
"-I": directorio que utilizará para buscar los archivos .h (headers)
"-L": directorio donde buscará las bibliotecas para linkeditar
"-l": nombre de la biblioteca a utilizar (sin las primeras 3 letras "lib")
¿CÓMO COMPILAR EL KERNEL? Antes de configurar el kernel anote en un papel la
siguiente información:

Tipo de procesador que posee

Si posee arquitectura PCI

El tipo de controlador IDE de su sistema, si es que éste tiene uno.

El tipo de controlador SCSI de su sistema, si lo posee.

El tipo de interfaz que utilice el CD

El tipo de tarjeta de red de su sistema. Saber el número de fabricación y modelo
del chipset de la tarjeta de red.

Los números de fabricación, de modelo y de chip de la tarjeta de sonido. Una
buena forma de obtener toda esta información es escribir en la consola el
siguiente comando: dmesg, el mismo nos mostrará todo lo que detectó el kernel
en la máquina. No olviden anotar toda la información del hardware. La necesitarán
luego!
Pasos a seguir
1. Bajamos el kernel de www.kernel.org y lo guardamos en /tmp
2. Descomprimimos el núcleo en el directorio /usr/src. Recordemos que para
cambiarse a este directorio deberá escribir cd /usr/src. Para descomprimir
escriba: tar xzvf /tmp/linux-2.4.21.tar.gz . Una vez que sea descomprimido
tendremos el siguiente directorio /usr/src/linux .
3. Si tuviéramos en nuestra máquina el kernel versión 2.4.20 podríamos bajar
únicamente el parche de kernel.org en vez de la versión completa del Kernel. Si
realizamos esta operación deberemos hacer lo siguiente:
Marco Antonio de Hoyos
Pág 2
http://tecnicoslinux.com.ar
GNU/Linux – Compilación del KERNEL
a. zcat /tmp/patch-2.4-20.gz | patch –p0. De esta forma estaremos
utilizando el zcat para ver el archivo y redireccionando esta salida al comando
patch. Una vez que finalicemos este proceso se verá una lista de los archivos
modificados por el parche.
b. Procedemos a renombrar el archivo emparchado para evitar confusiones en un
futuro.
4. A partir de aquí comienza el proceso de Configuración:
a. Si queremos borrar cualquier configuración que haya en el núcleo y dejar un
kernel genérico ejecutamos lo siguiente: make mrproper.
b. Si deseamos setear el núcleo definiendo paso a paso las configuraciones,
deberemos elegir alguna de estas tres opciones:
c.
Modo texto. Escribimos en la consola el comando make config y nos harán
preguntas acerca de cómo queremos setear cada cosa. (Esta operación puede
demorar muchísimo tiempo! ya que el Sistema realizará pregunta por
pregunta y esperará que contestemos por sí o por no cada una de ellas para
continuar)
d. Modo texto con menú de opciones. Escribimos en la consola el comando make
menuconfig. Iniciará una aplicación funcional para configurar el kernel.
Observemos que su uso es bastante intuitivo: las opciones con un < > indican
la posibilidad de modularizar. Si en ella presionamos M la seleccionaremos
como módulo. Si presionamos ESPACIO aparecerá un * indicando que será
incluido en el kernel. Finalmente, si presionamos N lo deseleccionaremos. Las
opciones marcadas con [ ] no son modularizables. Es importante aclarar en
este momento que existen dos formas de setear el núcleo: monolítica
ó modular. En la monolítica todo lo que necesitamos está incluido en el
núcleo y una vez compilado no podremos cambiar nada. Con la forma modular
podremos instalar y desinstalar los módulos por separado sin tener que
reiniciar la PC. Vamos a seleccionar los módulos en la configuración y se
guardarán en /lib/modules.
e.
Modo gráfico. Para acceder a este modo tipeeamos make xconfig. En este
modo se lanzará una aplicación sumamente amigable en la que no tendremos
ningún problema.
f.
Una vez que elegimos la opción debemos configurar los siguientes puntos (es
muy importante que no nos olvidemos ninguno!)
g. Procesador: Procesor type _ Dispositivo de placa de red: Network Device
Suport. Recordemos habilitar el protocolo ppp, que nos permitirá configurar la
conexión a internet una vez que finalice la compilación.
h. Firewall: Networking packet filtering, seleccionamos networking filters y luego
Iptables suport.
i.
File Systems: Seleccionamos Ext3, NFS, NTFS, Netware, DOS FAT, MSDOS,
Vfat, Virtual Memory, ISO 9660 (cdrom)
j.
Networking Options: Seleccionamos Packet Socket, Socket Filtering, IP: Netfilter Configuration.
k.
Sound
l.
Kernel Hacking
Marco Antonio de Hoyos
Pág 3
http://tecnicoslinux.com.ar
GNU/Linux – Compilación del KERNEL
5. Cuando se termina de configurar se genera el archivo .config y nos instará a
ejecutar make dep y clean.
a.
make dep compila lo que se necesita para que el kernel se compile
correctamente. Llama a gcc y compila las dependencias.
b. make clean, borra los archivos temporales que se generaron al compilar las
librerías.
6. En este momento deberemos ejecutar el comando make bzImage que generará el
kernel propiamente dicho con el cual trabajará luego. Los archivos creados se
guardan en /usr/src/linux/arch/i386/boot/bzImage
7. Escribimos en la consola make modules, para compilarlos y luego..
8. make modules_install para acoplarlos al núcleo.
9. En este punto el kernel ya ha sido compilado y debe ser ubicado en el sector de
booteo para estar accesible cuando se inicia su PC. Para esto deberemos escribir:
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.21
10. cp /usr/src/linux/system.map /boot/system.map-2.4.21 11.
11. Una vez copiados estos dos archivos cambiamos al directorio /boot y ejecutamos
el comando ls –l para buscar el viejo link y cambiarlo.
12. Cambiamos el archivo de configuración del lilo ó grub para poder acceder al nuevo
kernel al iniciar. Veamos cómo lo haríamos en lilo: Agregar lo siguiente a /
etc/lilo.conf
image=/boot/vmlinuz-2.4.0label=new
root=/dev/hda1
# reemplazar por la partición root correcta en tu sistema
# ver la parte del lilo.conf correspondiente al kernel ACTUAL para
# saber cuál es la partición root que se está utilizando
# en caso de haber creado el RAMDISK inicial.
# eliminar el comentario de la siguiente línea
#initrd=/boot/initrd-2.4.0.img read-only
initrd=/boot/initrd-2.4.0.img read-only
Ejecutar lilo -t y si no muestra errores, ejecutar lilo -v y reiniciar la máquina.
Lista rápida de pasos a seguir para compilar su kernel:
make dep
make clean
make bzImage
# ir a tomar cafe (mucho cafe)
make modules
make modules_install
cp /usr/src/linux-2.4.20/arch/i386/boot/bzImage /boot/vmlinuz-2.4.20
Marco Antonio de Hoyos
Pág 4
http://tecnicoslinux.com.ar
GNU/Linux – Compilación del KERNEL
# ojo, en la línea anterior es vmlinuz (con z al final)
cp /usr/src/linux-2.4.20/System.map /boot/System.map-2.4.20
cd /boot
rm System.map
ln -s System.map-2.4.20System.map
RAMDISK inicial (No es requerido usualmente en Red Hat Linux)
mkinitrd /boot/initrd-2.4.0.img 2.4.0
OPCIONAL: crear un nuevo rescue disk (RECOMENDADO!!!)
mkbootdisk --device /dev/fd0 2.4.0
En Red Hat 7.0 es necesario modificar el archivo nakefile luego de descompactar la
tarball, en la siguiente línea, que es la que se encarga de indicar el compilador a
utilizar:
CC =($CROSSCOMPILE)gcc ... etc ... etc ...
Debe quedar así (es todo la misma línea):
CC :=$(shell if which $(CROSS_COMPILE)kgcc > /dev/null 2>&1; then echo
$(CROSS_COMPILE)kgcc;
else
echo
$(CROSS_COMPILE)gcc;
fi)
-D__KERNEL__ -I$(HPATH)
INSTALACIÓN DE "PARCHES" (patch).
zcat /tmp/patch-2.4.1 | patch - pØ
Para ver los mensajes que aparecen durante el arranque. Tenemos que escribir el
siguiente comando:
dmesg | less (less es una versión de more que permite moverse hacia atrás).
Marco Antonio de Hoyos
Pág 5
http://tecnicoslinux.com.ar
Descargar